CString和其他字符串互转

字符集:使用Unicode字符集(UTF-16)

CString转string

USES_CONVERSION;
CString str1;
std::string str2(W2A(str1));

CString转System::String ^

    CString str = _T("xxxx");
    System::String ^s = gcnew System::String(str);

System::String ^ 转CString

System::String ^s = "xxxx";
CString str(s);

CString转char*

    CString str1 = _T("111");
    CString str2 = _T("222");
    USES_CONVERSION;
    char *c1 = T2A(str1);
    char *c2;
    c2 = T2A(str2);

或使用CStringA

CString strTemp = _T("test");
CStringA strATemp(strTemp);
char value[100] = { 0 };
sprintf_s(value, "%s", strATemp);

char*转CString

    char c11[200] = "111";
    char *c22 = "222";
    CString str11, str22;
    USES_CONVERSION;
    str11 = A2T(c11);
    str22 = A2T(c22);

 CString转int

    CString str = _T("1");
    int i = _wtoi(str);

 std::string 转 CString

1
2
std::string test_str = “hello”;
CString cstr = test_str.c_str(); // 返回值为 char* 实质就是string字符串

 

字符集:使用多字节字符集

CString转string

CString str1;
std::string str2(str1.Getbuffer());
str1.ReleaseBuffer();

 CString转char *

sprintf(chBuff, str.GetBuffer());

char *转CString

CString str(chBuff);
CString str;
str.Format("%s", chBuff);

  CString转WPARAM

CString str;
(WPARAM)str.GetBuffer();
str.ReleaseBuffer();

WPARAM转CString

CString str;
str.Format("%s", wParam);

CString转int

    CString str = "1";
    int i = atoi(str);
int i = _tcstoul(strHex, 0, 16);//16进制字符串转int

取一个int的高4位和低4位

    int a = 165;
    int high = a >> 4;//10
    int low = a & 0x0F;//5

ANSI转UTF8

复制代码
void ConvertANSIToUTF8(CString &strANSI)
{
    int nLen = ::MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS, (LPCTSTR)strANSI, -1, NULL, 0);
    unsigned short * wszUTF_8 = new unsigned short[nLen + 1];
    memset(wszUTF_8, 0, nLen * 2 + 2);
    nLen = MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strANSI, -1, (LPWSTR)wszUTF_8, nLen);

    nLen = WideCharToMultiByte(CP_UTF8, 0, (LPCWCH)wszUTF_8, -1, NULL, 0, NULL, NULL);
    char *szUTF8 = new char[nLen + 1];
    memset(szUTF8, 0, nLen + 1);
    WideCharToMultiByte(CP_UTF8, 0, (LPCWCH)wszUTF_8, -1, szUTF8, nLen, NULL, NULL);
    strANSI = szUTF8;
    delete wszUTF_8;
    delete szUTF8;
}
复制代码

char**

复制代码
    int index = 4;
    char **pErr = (char**)malloc(sizeof(char*)*index);//申请有n个字符串的内存 
    for (int i = 0; i < index; i++)
    {
        pErr[i] = (char *)malloc(sizeof(char) * 128);//申请字符串的大小
        memset(pErr[i], 0, sizeof(pErr[i]));
    }

        for (int i = 0; i < index; i++)
        {
            free(pErr[i]);//释放每个字符串的内存 
        }
        free(pErr);//释放指向指针的a指针的内存
复制代码

 科学计数法字符串转float

    CString str1;
    str1 = "0.574E+00";
    float fTemp = strtod(str1, NULL);
    CString str2;
    str2.Format("%.2f", fTemp);
    AfxMessageBox(str2);//0.57

 字符串小数转float

fTemp = _tstof(strTemp);

_tstof在ASCII编码下被编译为atof,在UNICODE编码下被编译为_wtof

posted @   ckrgd  阅读(175)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示