• wchar_t,char,string,wstring等的总结


    一、LPSTR LPCSTR LPTSTR LPCTSTR等

    确定的类型:
    LPSTR = CHAR * = char *
    LPCSTR = const CHAR * = char *  //c意为const 
    不确定类型(可变型):
    LPTSTR = LPWSTR = WCHAR * = wchar_t * //(Unicode编码)
    = LPSTR  = CHAR *  = char *  //(多字节编码) 
    
    TCHAR  = wchar_t //Unicode编码
    = char    //多字节编码  

    二、CString与char *

    • 多字节环境:CString等价于const char *,因此,在const char *的参数下可以直接使用CString,但是不能用于char *。

    例:

    void show(const char * name)
    {
        AfxMessageBox(name);
    }    
    .........
    
    CString name("luotian");
    show(name); //可以通过

    CString可以智能化
    在多字节环境下无论怎么赋值都是ASCII编码,比如:CString a(L"luotian"),加上L修饰,CString依然将它进行ASCII编码。
    在Unicode环境下,无论怎么赋值都是Unicode编码,比如:CString a("luotian"),不加L修饰依然可以通过。

    • CString与LPCTSTR

    在函数参数需要LPTSTR,LPCTSTR等等时,CString变量可以直接使用.

    //例如:在Unicode环境下:
    CString a("Luotian");
    MessageBox(a);
    • CString->LPTSTR

    //强制类型转换
    CString a("Luotian");
    LPTSTR p = (LPTSTR)(LPCTSTR)a;
    
    //用CString的GetBuffer()方法
    LPTSTR p = a.GetBuffer();
    • LPTSTR->CString

    可以直接赋值操作.

    三、char * 与 wchar_t *的互换(重点

    • ASCII->Unicode

    LPSTR source ="Luotian";//源串
    size_t len = strlen(source) + 1;
    size_t converted = 0;
    LPTSTR dest= (LPTSTR)malloc(len*sizeof(WCHAR));
     
    mbstowcs_s(&converted,dest,len,source,_TRUNCATE);  
    • Unicode->ASCII
    #define WChar2Char(lpWideCharStr,cbWideChar,lpMultiByteStr,cbMultiByte) 
    WideCharToMultiByte(CP_ACP, 0, lpWideCharStr, cbWideChar, lpMultiByteStr, cbMultiByte, NULL, NULL)
    例:
    WChar2Char(source,-1,dest,cb字节数);
    TCHAR dest[256];
    LPCWSTR source=L"Luotian";
    WChar2Char(source, -1, dest, 256);

    四、string和wstring

    • string->const char *(LPCSTR)和wstring->const wchar_t * (等价于LPCTSTR)

    //采用.c_str()方法;
    string a("Luotian");
    const char * p = a.c_str();
    • char * p->string

    char * p = "luotian";
    string a=p;
    //string和CString的一个区别在于:函数参数需要LPTSTR时,CString可以直接用,而string不行。

     

  • 相关阅读:
    数据结构小总结(成都磨子桥技工学校数据结构前12题)
    Scrum 冲刺博客第二篇
    Scrum 冲刺博客第一篇
    centos部署keepalived服务
    第四周作业
    Svelte 中怎样做双向数据绑定
    Svelte 中多层组件事件转发
    Svelte 中的事件修饰符
    怎样在 Svelte 中设置自定义事件
    怎样使用 Svelte 中的异步块
  • 原文地址:https://www.cnblogs.com/tinaluo/p/6081165.html
Copyright © 2020-2023  润新知