1. 程式人生 > >關於wchar_t 的輸出及 wchar_t* 與 char*之間的相互轉換

關於wchar_t 的輸出及 wchar_t* 與 char*之間的相互轉換

wchar_t 定義的變數之所以不能輸出呢?我查了一下資料,就是說寬字元型別要本地化,否則輸不出想要結果。
本地化有三條語句可以使用,任取其一。最後一句是全域性函式,前兩個是wcout的一個成員函式的兩種表達方式。
std::wcout.imbue(std::locale("chs"));
std::wcout.imbue(std::locale(""));
setlocale(LC_ALL,"Chinese-simplified");
舉例:
int main()
{
std::wchar_t a =L'中';
std::wcout.imbue(std::locale("chs"));


     //std::wcout.imbue(std::locale(""));
    //setlocale(LC_ALL,"Chinese-simplified");
std::wcout << a <<std::endl;
 
 
system("pause");
return 0;

}

也談C++中char*與wchar_t*之間的轉換  


2008-06-20 21:04:14|  分類: 技術創新 |  標籤:c++  程式設計  電腦   |字號 訂閱
關於C++中的char*與wchar_t*這兩種型別的相互轉換,網上說的大多很繁瑣,可行性也不高。下面這個方法是在MSDN裡面找到的,個人認為還比較不錯:
 
把char*轉換為wchar_t*
用stdlib.h中的mbstowcs_s函式,可以通過下面的例子瞭解其用法:
 
char *CStr = "string to convert";
size_t len = strlen(CStr) + 1;
size_t converted = 0;
wchar_t *WStr;
WStr=(wchar_t*)malloc(len*sizeof(wchar_t));
mbstowcs_s(&converted, WStr, len, CStr, _TRUNCATE);
 
其結果是WStr中儲存了CStr的wchar_t版本。
 
把wchar_t*轉換為char*
和上面的方法類似,用stdlib.h中的wcstombs_s函式,例子:
 
wchar_t *WStr = L"string to convert";
size_t len = wcslen(WStr) + 1;
size_t converted = 0;
char *CStr;
CStr=(char*)malloc(len*sizeof(char));
wcstombs_s(&converted, CStr, len, WStr, _TRUNCATE);
 
這時WStr中的內容將被轉化為char版本儲存在CStr中。
 
另外還可以通過流的方法來char*型別轉換為wchar_t*型別,但這樣的轉換得到的結果將是const型別,而類似的方法不能將wchar_t*型別轉換為char*型別。
 
把(const)char*轉換為const wchar_t*
需要用到 sstream 標頭檔案:
 
char *cstr="string to convert";
wstringstream wss;
wss<<cstr;
 
再呼叫wss.str().c_str(); 即可得到 const wchar_t* 型別的返回值。
 
雖然stringstream流不能將wchar_t*轉換成char*,但可以用來進行數值型別和字串之間的轉換,例如:
 
double d=2734792.934f;
stringstream ss;
ss<<d;
 
呼叫ss.str()可得到string型別字串 ”273479e+006”,又如:
 
string str("299792458");
stringstream ss;
long i=0;
ss<<str;
ss>>i;
 
此時i=299792458。

相關推薦

【PowerShell】ASCIIChar之間轉換

clas cnblogs class pan bsp 之間 power code log 1 [char[]][int[]]$char=65..90 2 $char -join ‘,‘ 3 [int[]][char[]]$ascii=$char 4 $ascii -joi

PHP陣列物件之間相互轉換

/**  * 陣列 轉 物件  *  * @param array $arr 陣列  * @return object  */ function ar

win32應用程式,TCHARCHAR相互轉換

TCHR 與 CHAR相互轉換 含義 TChar to Char CHAR To TCHAR 含義 TCHAR:在Unicode編碼下,為寬字元wchar;在Ansi編碼下,為字元char。 CHAR:是在Ansi編碼下字串格式。

base64編碼圖片之間相互轉換

Base64是網路上最常見的用於傳輸8Bit位元組碼的編碼方式之一 一、將base64轉換成圖片 只需要在img 標籤中引入即可,注意要加上標明字首(data:image/png;base64),否則並不知道,這串程式碼是幹啥的 如: 二、將圖片轉換成base64 通過ca

std::string char* 之間轉換

std::string 是c++標準庫裡面其中一個,封裝了對字串的操作 1:把string轉換為char*有三種方法: 1. .data 2. .c_str 3. .copy using namesapce std; string str = "h

QStringchar *的相互轉換

 注:如下方法應該是qt3.0的,一些方法大同小異,請參考qt4的類文件說明。 How can I convert a QString to char* and vice versa ?(trolltech) Answer:In order to convert a QString to a char*,

C# String Char[] 陣列 相互轉換

string 轉換成 Char[]   string ss = "abcdefg";   char[] cc = ss.ToCharArray(); Char[] 轉換成string   string s = new string(cc); byte[] 與 string

Unicode下CStringchar *之間轉換

1、Unicode下CString轉換為char * 方法一:使用API:WideCharToMultiByte進行轉換        CStringstr = _T("D:\\校內專案\\QQ.bmp");        //注意:以下n和len的值大小不同,n是按字元計

CStringchar相互轉換

CString CharToCString(char *pText) {int    iLength  = 0; wchar_t *pwText = NULL;CString csText  = _T("");/* Get the number of wide charac

CStringchar之間轉換

1、多字符集設定下:CString To char*:1)、CString str; char *buf = str.GetBuffer();2)、CString str;char *buf = (LPSTR)(LPCSTR)str;char* To CString1)、c

DataTable 實體之間相互轉換

一:ConvertDataTableToModel: 主要將DataTable中改動的內容同步到實體類集合中 /// <summary> /// 將DB中改動的內容同步到泛型集合中 /// </summary>

CStringchar[] 的相互轉換方法以及結尾亂碼問題的分析解決

  這是一個很常見的問題,下面記錄下我的解決方案。 一、CString 轉化成char[] 方法一:運用 CString.GetBuffer(0) 與 strcpy CString str; int len = str.GetLength(); char* arr = n

.mat,.txt,.csv 資料轉換為weka中的arff格式matlab和Weka之間相互轉換格式

function r = CSVtoARFF (data, relation, type) % csv to arff file converter % load the csv data [rows cols] = size(data); % op

QStringchar *之間轉換

1.QString轉char * 先將QString轉換為QByteArray,再將QByteArray轉換為char *。 注意:不能用下面的轉換形式char *mm = str.toLatin1().data();。因為這樣的話,str.toLatin1()得到的QByteArray型別結果就不能儲存,最

XStream實現javabeanxml之間相互轉換

XStream是thoughtworks公司釋出的一個簡單的Java類庫,用於將JavaBean序列化為XML,並且能夠將XML檔案反向轉換為JavaBean. 例項: user.java impor

MFC中 CStringChar[] 的相互轉換

為了簡化操作,我寫成了兩個函式: //CString轉Char[] 返回陣列首元素地址 char * CSocket_ClientDlg::CStringToCharArray(CString str

關於wchar_t輸出 wchar_t* char*之間相互轉換

wchar_t 定義的變數之所以不能輸出呢?我查了一下資料,就是說寬字元型別要本地化,否則輸不出想要結果。 本地化有三條語句可以使用,任取其一。最後一句是全域性函式,前兩個是wcout的一個成員函式的兩種表達方式。 std::wcout.imbue(std::locale(

QT char*,wchar_t*QString之間轉換

//QString to wchar_t: const wchar_t * encodedName = reinterpret_cast<const wchar_t *>(fileName.utf16()); //QString to char * (general case):

VC之CString,wchar_t,int,string,char*之間轉換(轉帖)

CString 轉 wchar_t CString path = "asdf"; wchar_t wstr[256] = path.AllocSysString(); 或者: wchar_t wcstring[256]; MultiByteToWideChar(CP_ACP,0,path,-1,wcstri

RGBHSV之間轉換公式顏色表

bsp 公式 blog log b- size 分享 ont idt RGB & HSV 英文全稱  RGB - Red, Green, Blue  HSV - Hue, Saturation, Value HSV --> RGB 轉換公式 HSV --&g