CString轉String詳解

一、CString轉String函數

CString是MFC(Microsoft Foundation Class)中提供的一種字元串類,而String是C++11標準中的字元串類。在兩者之間進行轉換是很常見的操作。可以使用CString::GetString函數將CString對象轉換為char*類型,然後再將char*類型轉換為string類型。

    CString cstr = "Hello World!";
    std::string str(cstr.GetString());
    std::cout << str << std::endl;

在使用GetString函數時需要注意,如果CString對象被修改,那麼返回的指針也會指向修改後的字元串,因此必須保證在使用指針之前CString對象不會被修改。

二、CString轉char數組

使用ConvertUnicodeToMultiByte函數將CString對象轉換為char數組。

    CString cstr = "Hello World!";
    char s[100];
    WideCharToMultiByte(CP_ACP, NULL, cstr, -1, s, 100, NULL, NULL);
    std::cout << s << std::endl;

其中WideCharToMultiByte是Windows API中將Unicode編碼的字元轉換為多位元組字符集的函數。

三、CString轉String utf8

使用CT2CA函數將CString對象轉換為char*類型,然後再將char*類型轉換為string類型,CT2CA 默認將CString轉換為UTF-8字元串。

    CString cstr = "Hello World!";
    std::string utf8str(CT2CA(cstr));
    std::cout << utf8str << std::endl;

四、CString轉String出錯

CString到string的轉換可能會出現亂碼,特別是在多位元組字符集(如GBK)中常常出現這種情況。如果出現亂碼,最好的解決辦法是使用Unicode字符集。

如果一定要使用多位元組字符集,可以先將CString轉換為wchar_t數組,再將wchar_t數組轉換為char數組,並指定正確的代碼頁。

    CString cstr = "你好世界!";
    wchar_t wsz[100];
    wcscpy_s(wsz, cstr);
    char s[100];
    WideCharToMultiByte(CP_ACP, NULL, wsz, -1, s, 100, NULL, NULL);//這裡的-1 是因為WideCharToMultiByte函數在 NULL字元時能夠自己計算長度
    std::cout << s << std::endl;

五、CString轉String^

CString到String^可以使用marshal_as函數進行轉換,需要包含頭文件msclr/marshal_cppstd.h

    #include 
    CString cstr = "Hello World!";
    String^ str = msclr::interop::marshal_as<String^>(CString(cstr));
    Console::WriteLine(str);

六、CString轉char

將CString對象轉換為char類型可以使用(LPCTSTR)強制轉換。

    CString cstr = "H";
    char c = (LPCTSTR)cstr;
    std::cout << c << std::endl;

七、CString轉double

將CString對象轉換為double類型可以使用_tstof函數。

    CString cstr = "3.1415926";
    double pi = _tstof(cstr);
    std::cout << pi << std::endl;

八、CString轉換為String

使用CT2T函數將CString對象轉換為CT2T<CString, strtype>類型,然後再通過ToString函數將其轉換為String類型。

    CString cstr = "Hello World!";
    String^ str = gcnew String(CT2T<CString, strtype>(cstr).ToString());
    Console::WriteLine(str);

九、CString轉byte數組

使用wstring類型臨時轉換,然後使用reinterpret_cast強制轉換為unsigned char*類型的指針即可。

    CString cstr = "Hello World!";
    std::wstring wstr = CT2W(cstr);
    unsigned char* bytes = reinterpret_cast(wstr.c_str());
    int len = wstr.size() * sizeof(wchar_t);
    for (int i = 0; i < len; ++i)
    {
        std::cout << (int)bytes[i] << " ";
    }
    std::cout << std::endl;

總之,CString到String的轉換雖然看起來很簡單,但是卻需要注意很多細節。希望本文能夠幫助到需要進行CString到String轉換的開發者。

原創文章,作者:RDEI,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/150014.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
RDEI的頭像RDEI
上一篇 2024-11-05 16:55
下一篇 2024-11-07 09:48

相關推薦

  • c# enum轉換成string

    本文將從以下幾個方面詳細闡述c#中enum類型轉換成string類型的方法及注意事項。 一、基本語法和示例 c#中的enum類型可以看作是一組有名字的常量值,通常用於定義一組相關的…

    編程 2025-04-29
  • JWT String Argument Cannot Be Null or Empty

    JWT(JSON Web Token)是一種用於進行身份驗證的標準。在使用JWT時,經常會遇到「JWT String Argument Cannot Be Null or Empt…

    編程 2025-04-27
  • Python中String包含的進階應用

    對於Python程序員而言,String類型的操作是日常工作中必不可少的一部分。String包含的操作很多,其中最基礎的操作就是判斷一個字元串是否包含另一個字元串。本篇文章將對Py…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25

發表回復

登錄後才能評論