c++字符串LPCTSTR格式转化为char*
求高人们指点一下,或者提供一些相关资料,关于LPCTSTR、LPTSTR等一些与TCHAR......这些对应关系,和不借助MFC情况下与char*互相转换的方法。...
求高人们指点一下,或者提供一些相关资料,关于LPCTSTR、LPTSTR等一些与TCHAR......这些对应关系,和不借助MFC情况下与char*互相转换的方法。
展开
2个回答
展开全部
C语言中的串有两种字符类型组成。
一种是char ,一种wchar_t。
前者是多字节串也就ANSI串,特点是每个字符最多用1个字表示,对于汉字是2个字节或者3个字节不等表示,最大程度节省字符空间。
后者是宽字节串,特点是,所有字符均由2个字节表示比如字符 'A',存入的是 ‘0’'A‘这两个字符,它的最大的好处统一了所有串表示方法,操作方面。
ANSI情况下串 “ABC中国” 存入的情况如下: ‘A’,‘B’,'C',‘中’,'国' 一共占1+1+1+2+2 个字组成(不包括末位的'\0')
宽字节串 “ABC中国”,存入的情况如下::'0''A' '0''B' '0''C' '中' ‘国’,一共占2+2+2+2+2个字节组成(不包括末位的'\0\0')。
把ANSI串(多路字节串)转化成宽字节串的方法:MultiCharToWideChar
把宽字节串转化成ANSI串 :WideCharToMultiByte
以上所有的串都是从这种串引发而来:
ANSI串:char、CHAR
ANSIC串的指针:LPSTR、PSTR、PCHAR
宽字节串:wchar_t,WCHAR
宽限字节串的指针:LPWSTR、PWCHAR、PWCHAR
有的时候,我们想编译两套代码,即在多字节下也能编译,在宽字节下也能编译,所以定义了宏了UNICODE
如果定义了UNICODE,
这些都与char(带P或者LP示表char *)等价:
LPCTSTR、LPTSTR、TCHAR
如果没有定义UNICODE,
下面这些都与wchar_t(带P或者LP表示wchar_t *)等价:
LPCTSTR、LPTSTR、TCHAR
代码表示:
#ifdef UNICODE // r_winnt
typedef WCHAR TCHAR, *PTCHAR;
typedef WCHAR TBYTE , *PTBYTE ;
typedef LPWCH LPTCH, PTCH;
typedef LPWSTR PTSTR, LPTSTR;
typedef LPCWSTR PCTSTR, LPCTSTR;
typedef LPUWSTR PUTSTR, LPUTSTR;
typedef LPCUWSTR PCUTSTR, LPCUTSTR;
typedef LPWSTR LP;
#else /* UNICODE */ // r_winnt
typedef char TCHAR, *PTCHAR;
typedef unsigned char TBYTE , *PTBYTE ;
typedef LPCH LPTCH, PTCH;
typedef LPSTR PTSTR, LPTSTR, PUTSTR, LPUTSTR;
typedef LPCSTR PCTSTR, LPCTSTR, PCUTSTR, LPCUTSTR;
#endif /* UNICODE */
记住带T的在不同情况表示的意思不一样,有时候表示char ,有时候表示wchar_t
一种是char ,一种wchar_t。
前者是多字节串也就ANSI串,特点是每个字符最多用1个字表示,对于汉字是2个字节或者3个字节不等表示,最大程度节省字符空间。
后者是宽字节串,特点是,所有字符均由2个字节表示比如字符 'A',存入的是 ‘0’'A‘这两个字符,它的最大的好处统一了所有串表示方法,操作方面。
ANSI情况下串 “ABC中国” 存入的情况如下: ‘A’,‘B’,'C',‘中’,'国' 一共占1+1+1+2+2 个字组成(不包括末位的'\0')
宽字节串 “ABC中国”,存入的情况如下::'0''A' '0''B' '0''C' '中' ‘国’,一共占2+2+2+2+2个字节组成(不包括末位的'\0\0')。
把ANSI串(多路字节串)转化成宽字节串的方法:MultiCharToWideChar
把宽字节串转化成ANSI串 :WideCharToMultiByte
以上所有的串都是从这种串引发而来:
ANSI串:char、CHAR
ANSIC串的指针:LPSTR、PSTR、PCHAR
宽字节串:wchar_t,WCHAR
宽限字节串的指针:LPWSTR、PWCHAR、PWCHAR
有的时候,我们想编译两套代码,即在多字节下也能编译,在宽字节下也能编译,所以定义了宏了UNICODE
如果定义了UNICODE,
这些都与char(带P或者LP示表char *)等价:
LPCTSTR、LPTSTR、TCHAR
如果没有定义UNICODE,
下面这些都与wchar_t(带P或者LP表示wchar_t *)等价:
LPCTSTR、LPTSTR、TCHAR
代码表示:
#ifdef UNICODE // r_winnt
typedef WCHAR TCHAR, *PTCHAR;
typedef WCHAR TBYTE , *PTBYTE ;
typedef LPWCH LPTCH, PTCH;
typedef LPWSTR PTSTR, LPTSTR;
typedef LPCWSTR PCTSTR, LPCTSTR;
typedef LPUWSTR PUTSTR, LPUTSTR;
typedef LPCUWSTR PCUTSTR, LPCUTSTR;
typedef LPWSTR LP;
#else /* UNICODE */ // r_winnt
typedef char TCHAR, *PTCHAR;
typedef unsigned char TBYTE , *PTBYTE ;
typedef LPCH LPTCH, PTCH;
typedef LPSTR PTSTR, LPTSTR, PUTSTR, LPUTSTR;
typedef LPCSTR PCTSTR, LPCTSTR, PCUTSTR, LPCUTSTR;
#endif /* UNICODE */
记住带T的在不同情况表示的意思不一样,有时候表示char ,有时候表示wchar_t
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询