C++中的各种字符操作

导读:本篇文章讲解 C++中的各种字符操作,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

建议在MFC中使用Unicode编码。

1. const char*转换成LPCTSTR    

可以使用_T()LTEXT();   如 _T(“Hello World”)L”Hello World”TEXT(“Hello World”)

2. LPCTSTR、LPTSTR、char*的区别

“T”表示如果定义了UNICODE,那LPCTSTR和LPTSTR表示的就是宽字符,否则就是ANSI;”C”表示const。
    MSDN上解释LPTSTR:

#ifdef UNICODE
typedef LPWSTR LPTSTR;
#else
typedef LPSTR LPTSTR;

    根据上面的描述,
    如果定义了UNICODE宏,那么LPTSTR = wchar_t*,否则LPTSTR = char*;
    如果定义了UNICODE宏,那么LPCTSTR = const wchar_t*,否则LPCTSTR = const char*;
    在程序中直接转换:

char* pStr;
(LPTSTR)pStr;

       如下是分别在不同编码下的定义:     

        // UNICODE
        typedef wchar_t WCHAR;
        typedef WCHAR *PWCHAR;
        typedef WCHAR *LPWCH,*PWCH;
        typedef CONST WCHAR *LPCWCH,*PCWCH;
        typedef WCHAR *NWPSTR;
        typedef WCHAR *LPWSTR, *PWSTR;
        typedef WCHAR UNALIGNED *LPUWSTR, *PUWSTR;
        
        typedef CONST WCHAR *LPCWSTR, *PCWSTR;
        typedef CONST WCHAR UNALIGNED *LPCUWSTR, *PCUWSTR;
        
        // ANSI
        typedef CHAR *PCHAR;
        typedef CHAR *LPCH, *PCH;
        
        typedef CONST CHAR *LPCCH, *PCCH;
        typedef CHAR *NPSTR;
        typedef CHAR *LPSTR, *PSTR;
        typedef CONST CHAR *LPCSTR, *PCSTR;
        
        #ifdef UNICODE
        typedef WCHAR TCHAR, *PTCHAR;
        typedef WCAHR TBYTE, *PTBYTE;
        typedef LPWSTR LPTCH, PTCH;
        typedef LPWSTR PTSTR, LPTSTR;
        typedef LPCWSTR PCTSTR, LPCTSTR;
        typedef LPUWSTR PUTSTR, LPUTSTR;
        typedef LPCUWSTR PCUTSTR, LPCUTSTR;
        typedef LPWSTR LP;
        #else
        typedef char TCHAR, *PTCHAR;
        typedef unsigned char TBYTE, *PTBYTE;
        typedef LPSTR LPTCH, PTCH;
        typedef LPSTR PTSTR, LPTSTR, PUTSTR, LPUTSTR;
        typedef LPCSTR PCTSTR, LPCTSTR, PCUTSTR, LPCUTSTR;
        #endif

    建议:
        1. 使用“中庸”API兼容,如_tcscpy(),可以在UNICODE和ANSI下同时使用;
        2.使用TCHAR;

3. CString、string、char*互相转化  

unicode下加_T()即可。
    -> string、char*  转换为CString 
        CString.format(“%s”,string.c_str()); 
        CString.format(“%s”,char*);
    -> CString 转 string
        string str(CString.GetBuffer(CString.GetLength()));
    -> CString转char*
        strcpy(char*,CString,sizeof(char*));
    -> string转char*
        char *p = string.c_str();
    -> char*转string
        string str(char*);

4. CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换

-> CString 转 LPCWSTR

        LPCWSTR = CString.AllocSysString();  // 方法一
        USES_CONVERSION;  // 方法二
        LPCWSTR = A2CW((LPCSTR)CString);  // MFC中CString与LPSTR可以通用

-> LPCWSTR 转CString

        CString str(LPCWSTR);

-> CString 转 LPWSTR

        LPWSTR = (LPWSTR)(LPCWSTR)str;

-> CString 转 LPSTR

        LPSTR = CString.GetBuffer();  // 方法一
        CString.ReleaseBuffer();
        LPSTR = (LPSTR)(LPCSTR)CString;  // 方法二

-> LPSTR转CString

        CString str(LPSTR);

-> LPCSTR与CString

        LPCSTR = (LPCSTR)CString;  // 可以直接转换

参考链接:MFC中的乱起八糟—-字符编码:LPTSTR,LPCTSTR, TCHAR等 – 夏天/isummer – 博客园 
    

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/46193.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!