以下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 庫進行字符串轉換時,可以使用以下函數封裝來實現從 CString
到 std::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);