複製鏈接
請複製以下鏈接發送給好友

wchar_t

鎖定
wchar_t是C/C++的字符類型,是一種擴展的存儲方式。wchar_t類型主要用在國際化程序的實現中,但它不等同於unicode編碼。unicode編碼的字符一般以wchar_t類型存儲。
中文名
寬字符
外文名
wchar_t
類    別
一種擴展的存儲方式
概    念
16位字符類型

目錄

wchar_t定義

char是8位字符類型,最多隻能包含256種字符,許多外文字符集所含的字符數目超過256個,char型無法表示。
wchar_t數據類型一般為16位或32位,但不同的C或C++庫有不同的規定,如GNU Libc規定wchar_t為32位,總之,wchar_t所能表示的字符數遠超char型。
標準C中的wprintf函數以及標準C++的iostream類庫中的類和對象能提供wchar_t寬字符類型的相關操作。

wchar_t例如

#include <iostream>
#include <locale>
#include <cstdlib>

using namespace std;

locale loc("chs");//windows下ok

//這段貌似在ubuntu下ok
//locale loc("zh_CN.UTF-8");
//而且還需要在ubuntu的終端中執行:
//sudo locale-gen

int main()
{
wchar_t wStr[]=L"這是一段中文";
wcout.imbue(loc);
wcout<<wStr<<endl;
getchar();
getchar();
return 0;
}
將char*轉換成wchar_t
可以用TEXT方法將char轉換成wchar_t
例如: wchar_t appName[5]=TEXT("test");
//注:
//TEXT()在winnt.h中的定義如下:

#define TEXT(quote) __TEXT(quote)

#ifdef UNICODE
#define __TEXT(quote) L##quote
#else
#define __TEXT(quote) quote
#endif

//所以如果未定義宏UNICODE,TEXT()是沒有效果的
方法2:
#include <windows.h> //聲明MultiByteToWideChar

wchar_t* c2w(const char *str)
{
	int length = strlen(str)+1;
	wchar_t *t = (wchar_t*)malloc(sizeof(wchar_t)*length);
	memset(t,0,length*sizeof(wchar_t));
	MultiByteToWideChar(CP_ACP,0,str,strlen(str),t,length);
	return t;
}