C++字符串轉換總結

以下C++字符串轉換均在unicode編碼下進行

目錄

  • string轉wstring
  • wstring轉string
  • MFC CString轉wstring
  • MFC CString轉string
  • MFC const char*轉CString
  • MFC CString轉const char*
  • char、wchar_t數組轉string
  • TCHAR數組轉到CString
  • CString轉為TCHAR數組


string轉wstring

當在 Unicode 下將 C++ 的 std::string 轉換為 std::wstring 時,通常需要考慮字符串編碼的問題。假設輸入的 std::string 是 UTF-8 編碼的,你可以使用以下代碼來實現一個函數來進行轉換:

#include <iostream>
#include <string>
#include <locale>
#include <codecvt>std::wstring utf8ToWstring(const std::string &utf8Str) {std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;return converter.from_bytes(utf8Str);
}int main() {std::string utf8String = u8"你好,世界!";std::wstring wideString = utf8ToWstring(utf8String);std::wcout << wideString << std::endl;return 0;
}

這個示例代碼中,utf8ToWstring 函數接受一個 UTF-8 編碼的 std::string,并返回一個 std::wstring。它使用了 std::wstring_convert 類和 std::codecvt_utf8 轉換器來進行轉換。

注意,上述代碼需要包含 <iostream><string><locale><codecvt> 頭文件,并且需要使用 C++11 或更高版本的標準。此外,確保你的編譯器和環境支持 Unicode 轉換操作。

在編譯時可能需要加入編譯選項 -std=c++11 或更高版本來啟用 C++11 特性。如果你使用的是早期的編譯器或環境,可能需要采取不同的方法來進行轉換。

wstring轉string

在 Unicode 下將 C++ 的 std::wstring 轉換為 std::string 時,同樣需要考慮字符串編碼的問題。假設輸入的 std::wstring 是寬字符編碼(通常是 UTF-16 或 UTF-32 編碼),你可以使用以下代碼來實現一個函數來進行轉換:

#include <iostream>
#include <string>
#include <locale>
#include <codecvt>std::string wstringToUtf8(const std::wstring &wideStr) {std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;return converter.to_bytes(wideStr);
}int main() {std::wstring wideString = L"你好,世界!";std::string utf8String = wstringToUtf8(wideString);std::cout << utf8String << std::endl;return 0;
}

這個示例代碼中,wstringToUtf8 函數接受一個寬字符編碼的 std::wstring,并返回一個 UTF-8 編碼的 std::string。它同樣使用了 std::wstring_convert 類和 std::codecvt_utf8 轉換器來進行轉換。

與之前的示例類似,記得包含 <iostream><string><locale><codecvt> 頭文件,并確保你的編譯器和環境支持 Unicode 轉換操作。

同樣需要在編譯時加入 -std=c++11 或更高版本的編譯選項來啟用 C++11 特性。如果你使用的是早期的編譯器或環境,可能需要使用不同的方法來進行轉換。

MFC CString轉wstring

當在 Unicode 下使用 C++ MFC 庫進行字符串轉換時,可以使用以下函數封裝來實現從 CStringstd::wstring 的轉換:

#include <afx.h> // 包含 MFC 頭文件
#include <string>std::wstring CStringToWString(const CString& cstr) {CT2CW pszUnicode(cstr); // 將 CString 轉換為 const wchar_t*std::wstring wstr(pszUnicode); // 構造 std::wstring 對象return wstr;
}

這里的 CT2CW 宏將 CString 轉換為 const wchar_t*。然后,我們使用 std::wstring 構造函數來創建一個 std::wstring 對象,將 Unicode 字符串從 MFC 格式轉換為 C++ 標準庫格式。

使用這個函數,可以將 CString 對象轉換為 std::wstring 對象,如下所示:

CString cstr = _T("Hello, 你好");
std::wstring wstr = CStringToWString(cstr);

記得在使用前包含必要的頭文件,確保正確編譯和鏈接 MFC 庫。請注意,這個函數假設的項目是基于 MFC 庫編寫的,并且使用 Unicode 字符集。

如果需要更復雜的字符串操作,可能需要在封裝函數中添加更多的邏輯以處理不同的情況。此外,確保的開發環境配置正確,以便支持 Unicode 字符串處理。

MFC CString轉string

在 Unicode 下使用 C++ MFC 進行字符串轉換時,將 CString 轉換為 std::string 需要一些額外的步驟,因為 CString 使用的是寬字符編碼(UTF-16),而 std::string 使用的是窄字符編碼(通常是 UTF-8)。

以下是一個封裝函數,用于將 CString 轉換為 std::string

#include <afx.h> // 包含 MFC 頭文件
#include <string>
#include <locale>
#include <codecvt>std::string CStringToUTF8(const CString& cstr) {int length = cstr.GetLength();if (length == 0) {return std::string();}CT2CA pszConvertedAnsiString(cstr); // 將 CString 轉換為 const char*std::string utf8str(pszConvertedAnsiString); // 使用默認編碼將窄字符轉換為 UTF-8return utf8str;
}

這個函數使用了 MFC 提供的宏 CT2CA 來將 CString 轉換為 const char*。然后,我們將窄字符編碼的字符串轉換為 UTF-8 編碼的 std::string,使用了 C++11 引入的 std::wstring_convert 類。

使用這個函數,可以將 CString 對象轉換為 UTF-8 編碼的 std::string,如下所示:

CString cstr = _T("Hello, 你好");
std::string utf8str = CStringToUTF8(cstr);

確保在使用前包含必要的頭文件,配置正確的開發環境以支持 Unicode 字符串處理,并在項目中使用正確的字符集。

請注意,這個函數僅處理基本的寬字符到窄字符的轉換。對于更復雜的字符串操作,可能需要處理更多的情況,例如考慮多字節字符等。

MFC const char*轉CString

在 Unicode 下,將 const char* 轉換為 CString 需要一些步驟。下面是一個封裝函數的示例,用于將 const char* 轉換為 CString

#include <afx.h> // 包含 MFC 頭文件CString CharPtrToCString(const char* charPtr) {if (charPtr == nullptr) {return _T("");}USES_CONVERSION;LPCWSTR wideStr = A2CW(charPtr); // 將 const char* 轉換為 LPCWSTRCString cstr(wideStr); // 構造 CString 對象return cstr;
}

在上面的函數中,我們使用了 MFC 提供的 USES_CONVERSION 宏,這將自動創建一個臨時的寬字符緩沖區,從 const char* 轉換為 LPCWSTR(寬字符字符串)。

使用這個函數,可以將 const char* 對象轉換為 CString,如下所示:

const char* charPtr = "Hello, 你好";
CString cstr = CharPtrToCString(charPtr);

請確保在使用前包含必要的頭文件,配置正確的開發環境以支持 Unicode 字符串處理,并在項目中使用正確的字符集。

這個函數只處理基本的轉換,如果需要更復雜的操作(例如處理多字節字符等),可能需要進行更多的處理。

MFC CString轉const char*

在 Unicode 下,將 CString 轉換為 const char* 需要一些額外的步驟,因為 CString 使用的是寬字符編碼(UTF-16),而 const char* 使用的是窄字符編碼(通常是 UTF-8)。以下是一個封裝函數的示例,用于將 CString 轉換為 const char*

#include <afx.h> // 包含 MFC 頭文件const char* CStringToCharPtr(const CString& cstr) {if (cstr.IsEmpty()) {return "";}USES_CONVERSION;LPCSTR charPtr = W2CA(cstr); // 將 CString 轉換為 LPCSTRreturn charPtr;
}

在上面的函數中,我們使用了 MFC 提供的 USES_CONVERSION 宏,這將自動創建一個臨時的窄字符緩沖區,從 CString 轉換為 LPCSTR(窄字符字符串)。

使用這個函數,可以將 CString 對象轉換為 const char*,如下所示:

CString cstr = _T("Hello, 你好");
const char* charPtr = CStringToCharPtr(cstr);

請確保在使用前包含必要的頭文件,配置正確的開發環境以支持 Unicode 字符串處理,并在項目中使用正確的字符集。

請注意,這個函數只處理基本的轉換,如果需要更復雜的操作(例如處理多字節字符等),可能需要進行更多的處理。

char、wchar_t數組轉string

在 Unicode 下,將 char 數組(UTF-8 編碼)轉換為 C++ 標準庫的 std::string 是相對直接的操作。可以使用 std::string 的構造函數來實現這個轉換。以下是一個示例函數,用于將 char 數組轉換為 std::string

#include <string>std::string CharArrayToString(const char* charArray) {if (charArray == nullptr) {return std::string(); // 返回空字符串}return std::string(charArray);
}

使用這個函數,可以將 char 數組轉換為 std::string,如下所示:

const char* charArray = "Hello, 你好";
std::string str = CharArrayToString(charArray);

請注意,這個函數假設輸入的 char 數組是以 null 結尾的 C 字符串(C-style string)。

另外,如果在使用 wchar_t 編碼的寬字符數組(UTF-16 編碼),可以使用類似的方法將其轉換為 std::wstring,只需將 std::string 替換為 std::wstring

#include <string>std::wstring WcharArrayToWString(const wchar_t* wcharArray) {if (wcharArray == nullptr) {return std::wstring(); // 返回空字符串}return std::wstring(wcharArray);
}

使用這個函數,可以將 wchar_t 數組轉換為 std::wstring,如下所示:

const wchar_t* wcharArray = L"Hello, 你好";
std::wstring wstr = WcharArrayToWString(wcharArray);

請確保在使用前包含必要的頭文件,并根據需要適當地配置開發環境。

TCHAR數組轉到CString

 TCHAR m_buf[100] = _T("Hello");CString str;str.Format(L"%s",m_buf);

CString轉為TCHAR數組

CString str = L"sssssss";
TCHAR m_buf[20];
_tcscpy(m_buf, str);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41653.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41653.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41653.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大數據-玩轉數據-Flink RedisSink

一、添加Redis Connector依賴 具體版本根據實際情況確定 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-redis_2.11</artifactId><version>1.1.5</version> </dependency>二、啟動redis 參…

如何提高深度學習性能

可用于 對抗過度擬合并獲得更好泛化能力的20 個提示、技巧和技術 如何從深度學習模型中獲得更好的性能? 這是我最常被問到的問題之一。 可能會被問為: 如何提高準確率? ……或者可以反過來說: 如果我的神經網絡表現不佳該怎么辦? 我經常回答說:“我不太清楚,但我有很…

分類預測 | MATLAB實現DBN-SVM深度置信網絡結合支持向量機多輸入分類預測

分類預測 | MATLAB實現DBN-SVM深度置信網絡結合支持向量機多輸入分類預測 目錄 分類預測 | MATLAB實現DBN-SVM深度置信網絡結合支持向量機多輸入分類預測預測效果基本介紹程序設計參考資料 預測效果 基本介紹 1.分類預測 | MATLAB實現DBN-SVM深度置信網絡結合支持向量機多輸入分…

工作紀實36-ES跨集群遷移

1.es數據備份、恢復 https://blog.csdn.net/andy_only/article/details/111319175 2.reindex命令 https://codeleading.com/article/40964498185/ 添加配置、重啟ES cd bin sh elasticsearch -d3.開源工具 https://github.com/elasticsearch-dump/elasticsearch-dump 4.…

回歸預測 | MATLAB實現基于SAE堆疊自編輯器多輸入單輸出回歸預測

回歸預測 | MATLAB實現基于SAE堆疊自編輯器多輸入單輸出回歸預測 目錄 回歸預測 | MATLAB實現基于SAE堆疊自編輯器多輸入單輸出回歸預測預測效果基本介紹模型描述程序設計參考資料 預測效果 基本介紹 1.MATLAB實現基于SAE堆疊自編輯器多輸入單輸出回歸預測&#xff1b; 2.運行環…

Request+Response

文章目錄 1. 介紹2. Request對象2.1 Request繼承體系2.2 Request獲取請求數據1.獲取請求行2.獲取請求頭3.獲取請求體4. 請求參數的通用方式5. 解決中文亂碼問題 2.3 Request請求轉發請求轉發資源間共享數據: 3. Response對象3.0 Response 繼承體系3.1 Response設置響應數據的功…

使用GEWE框架進行個人微信收藏夾及標簽管理(收藏夾篇)適用于微信群管、社群管理

友情鏈接&#xff1a;geweapi.com 點擊即可訪問&#xff01; 如果個人有多個微信&#xff0c;進行收藏夾管理是非常麻煩的事情&#xff0c;這時候可以用得到GEWE框架的管理模塊&#xff01;下面來看一下使用方法吧~ 獲取收藏信息 小提示&#xff1a; 獲取收藏相關信息注意&am…

iOS手機無法安裝Charles 的ssl證書

問題描述 iOS客戶端安裝證書時一直卡在下載這一步&#xff0c;無法抓包 1、打開Charles&#xff0c;選擇help→SSL Proxying→Install Charles Root Certificate on a Mobile Device or Remote Browser 2、按照步驟1中的提示進行操作&#xff0c;手機連接電腦代理&#xff0c;…

Spring系列七:聲明式事務

&#x1f418;聲明式事務 和AOP有密切的聯系, 是AOP的一個實際的應用. &#x1f432;事務分類簡述 ●分類 1.編程式事務: 示意代碼, 傳統方式 Connection connection JdbcUtils.getConnection(); try { //1.先設置事務不要自動提交 connection.setAutoCommit(false…

ZooKeeper的應用場景(分布式鎖、分布式隊列)

7 分布式鎖 分布式鎖是控制分布式系統之間同步訪問共享資源的一種方式。如果不同的系統或是同一個系統的不同主機之間共享了一個或一組資源&#xff0c;那么訪問這些資源的時候&#xff0c;往往需要通過一些互斥手段來防止彼此之間的干擾&#xff0c;以保證一致性&#xff0c;…

島嶼的最大面積(力扣)遞歸 JAVA

給你一個大小為 m x n 的二進制矩陣 grid 。 島嶼 是由一些相鄰的 1 (代表土地) 構成的組合&#xff0c;這里的「相鄰」要求兩個 1 必須在 水平或者豎直的四個方向上 相鄰。你可以假設 grid 的四個邊緣都被 0&#xff08;代表水&#xff09;包圍著。 島嶼的面積是島上值為 1 的…

error_Network Error

此頁面為訂單列表&#xff0c;是混合開發(頁面嵌入在客戶端中) 此頁面為訂單列表&#xff0c;此需求在開發時后端先將代碼發布在測試環境&#xff0c;我在本地調試時調用的后端接口進行聯調沒有任何問題。 此后我將代碼發布在測試環境&#xff0c;在app中打開頁面&#xff0c…

vue echarts中按鈕點擊后修改值 watch數據變化后刷新圖表

1 點擊按鈕 {feature: {myBtn1: {show: true,title: 反轉Y軸,showTitle: true,icon: path://M512 0A512 512 0 1 0 512 1024A512 512 0 0 0 512 0M320 320V192h384v128zM128 416V288h256v128zM320 704V576h384v128zM128 800V672h256v128z,onclick: () > {dataSetting.rever…

nginx服務器報錯502 Bad Gateway的原因以及解決辦法

服務器報錯nginx 502 Bad Gateway的原因以及解決辦法_502 bad gateway nginx_主題模板站的博客-CSDN博客

C++學習筆記總結練習:effective 學習日志

準則 1.少使用define define所定義的常量會在預處理的時候被替代&#xff0c;出錯編譯器不容易找到錯誤。而且還沒有作用范圍限制&#xff0c;推薦使用constdefine宏定義的函數&#xff0c;容易出錯&#xff0c;而且參數需要加上小括號&#xff0c;推薦使用inline有的類中例如…

已經開源的中文大模型對比,支持更新

大模型下載&#xff1a;互鏈高科 ClueAI/PromptCLUE-base-v1-5 at main (huggingface.co) 支持多任務生成&#xff0c;支持中文&#xff0c;不支持多輪對話&#xff0c;體驗&#xff1a;ClueAI (cluebenchmarks.com) 基于promptclue-base進一步訓練的模型&#xff1a;ClueAI/Ch…

【C與C++的相互調用方法】

C與C的相互調用方法 C與C為什么相互調用的方式不同C中調用CC中調用C致謝 C與C為什么相互調用的方式不同 C 和 C 之間的相互調用方式存在區別&#xff0c;主要是由于 C 和 C 語言本身的設計和特性不同。 函數調用和參數傳遞方式不同&#xff1a;C 和 C 在函數調用和參數傳遞方面…

docker oracle linux命令執行sql

docker 安裝參照 https://blog.csdn.net/arcsin_/article/details/123707618 docker container ls -a命令查看容器名 打開容器 docker exec -it orcl19c_03 /bin/bashsys 用戶登錄容器 sqlplus / as sysdbashow pdbs;什么是pdb數據庫&#xff1f;什么是CDB&#xff1f; 參…

游戲如何防御DDOS流量攻擊呢,用游戲盾真的有用么?

針對在線游戲行業來說&#xff0c;DDoS&#xff08;分布式拒絕服務&#xff09;攻擊是一種極具破壞性的威脅。DDoS攻擊可能導致游戲服務器不可用&#xff0c;嚴重影響游戲體驗和運營。為了解決這一問題&#xff0c;游戲盾作為一種專門為游戲行業設計的安全解決方案&#xff0c;…

微信小程序 藍牙設備連接,控制開關燈

1.前言 微信小程序中連接藍牙設備&#xff0c;信息寫入流程 1、檢測當前使用設備&#xff08;如自己的手機&#xff09;是否支持藍牙/藍牙開啟狀態 wx:openBluetoothAdapter({}) 2、如藍牙已開啟狀態&#xff0c;檢查藍牙適配器的狀態 wx.getBluetoothAdapterState({}) 3、添加…