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

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 @ 2022-01-28 11:28  ckrgd  阅读(201)  评论(0)    收藏  举报