C 多位元組與寬位元組之間的相互轉換

2021-09-26 19:53:27 字數 1286 閱讀 6894

c++基本資料型別中表示字元的有兩種:char、wchar_t。 

char叫多位元組字元,乙個char佔乙個位元組,之所以叫多位元組字元是因為它表示乙個字時可能是乙個位元組也可能是多個位元組。

字元陣列可以表示乙個字串,但它是乙個定長的字串,我們在使用之前必須知道這個陣列的長度。為方便字串的操作,stl定義好了字串的類string和wstring。string肯定不陌生,但wstring可能就用的少了。

string是普通的多位元組版本,是基於char的,對char陣列進行的一種封裝。

wstring是unicode版本,是基於wchar_t的,對wchar_t陣列進行的一種封裝。

廢話不多說,直接上**:

編譯執行環境:windows 10, visual studio 2015 enterprise

#include

#include

#include

#include

using namespace std;

/*string 轉換為 wstring

*/std::wstring c2w(const char *pc)

size_t i;

size_t size_of_ch = strlen(pc);

size_t size_of_wc = size_of_ch + 1;

wchar_t* pw = nullptr;

pw = new wchar_t[size_of_wc];

errno_t flag = mbstowcs_s(&i, pw, size_of_wc, pc, size_of_wc);

cout << "the lenght of converted:" << i << endl;

if (flag != 0) 

else }/*

wstring 轉換為 string

*/std::string w2c(const wchar_t * pw)

size_t convert;

size_t size_of_ch = wcslen(pw) + 1;

char *pc = nullptr;

if (!(pc = (char*)malloc(size_of_ch)))

errno_t flag = wcstombs_s(&convert, pc, size_of_ch, pw, size_of_ch);

/*轉換成功時,返回值為0。失敗,返回其他值  errno_t錯誤型別*/

if (flag != 0)

else

}int main()

VC下多位元組與寬位元組之間的相互轉換

為了支援unicode編碼,需要多位元組與寬位元組之間的相互轉換。這兩個系統函式在使用時需要指定 頁,在實際應用過程中遇到亂碼問題,然後重新閱讀 windows核心程式設計 總結出正確的用法。widechartomultibyte的 頁用來標記與新轉換的字串相關的 頁。multibytetowide...

C 多位元組字元與寬位元組字元相互轉換

pragma once class strtransfer 字元型別 wchar t char 獲取字元長度 wcslen strlen 連線兩個字串 wcscat strcpy 複製字串 wcscpy strcpy 比較兩個字串 wcscmp strcmp 具體引數詳見www.linuxidc.c...

C 寬位元組與多位元組之間的轉換

include iostream include string include locale.h include include windows.h using namespace std string 與 wstring之間的轉換 string ws2s const wstring ws wstr...