wchar_t,wchar_t 输入流

http://www.itjxue.com  2023-01-17 06:34  来源:未知  点击次数: 

C++中使用wchart_t需要包含什么头文件

1、MSDN的说明中,wchar_t类型定义在 STDDEF.H和STDLIB.H 这两个头文件中。

2、一般来说,其它标准库头文件都会包含STDDEF.H和STDLIB.H这两个头文件,因此一般添加了stdio.h文件即可包含wchar_t的类型声明。

wchar t*和wchar_t分别是什么?有什么区别?

wchar_t被定义为:?typedef?unsigned?short?wchar_t

wchar_t是C/C++的字符数据类型,char是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,char型无法表示。

??

wchar_t数据类型一般为16位或32位,但不同的C或C++库有不同的规定,如GNU?Libc规定wchar_t为32位[1],总之,wchar_t所能表示的字符数远超char型。

wchar?没有这个内置类型。

wchar_t的介绍

宽字符内型wchar_t。 wchar_t被定义为: typedef unsigned short wchar_t ;显然它是16位的。 wchar_t类型的常字串应该这样写: L"hello" 。 因此可以这样定义一个宽字符指针 wchar_t *pwc=L"hello";。

CString 如何转为wchar_t

unicode下CString 转为wchar_t:

方法一:使用api:multibytetowidechar进行转换。

char * pfilename = "d:\\校内项目\\qq.bmp"; //计算char *数组大小,以字节为单位,一个汉字占两个字节int charlen = strlen(pfilename); //计算多字节字符的大小,按字符计算。

int len = multibytetowidechar(cp_acp,0,pfilename,charlen,null,0);//为宽字节字符数组申请空间,数组大小为按字节计算的多字节字符大小tchar *buf = new tchar[len + 1]; //多字节编码转换成宽字节编码。

multibytetowidechar(cp_acp,0,pfilename,charlen,buf,len); buf[len] = '\0'; //添加字符串结尾,注意不是len+1 //将tchar数组转换为cstringcstring pwidechar,pwidechar.append(buf); //删除缓冲区delete []buf。

方法二:使用函数:a2t、a2w。

char * pfilename = "d:\\校内项目\\qq.bmp";uses_conversion;cstring s = a2t(pfilename); //cstring s = a2w(pfilename)。方法三:使用_t宏,将字符串转换为宽字符。

//多字节字符集,在vc6和vc7种可以编译通过的语句,但vs2005不能通过,默认为unicode字符集//afxmessagebox("加载数据失败",0)。

//书写代码使用text("")或_t(""),文本在unicode和非unicode程序里都通用、afxmessagebox(_t("加载数据失败"),0)。

扩展资料:

CString转换成char*:

若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:

方法一,使用强制转换。例如:CString theString( (_T("Char test "));LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString。

方法二,使用strcpy。例如:CString theString( (_T("Char test "));LPTSTR lpsz = new TCHAR[theString。GetLength()+1];_tcscpy(lpsz, theString)。

需要说明的是,strcpy(或可移值的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。

方法三,使用CString:GetBuffer。

如果你需要修改 CString 中的内容,它有一个特殊的方法可以使用,那就是 GetBuffer,它的作用是返回一个可写的缓冲指针。 如果你只是打算修改字符或者截短字符串,例如:

CString s(_T("Char test "));LPTSTR p = s。GetBuffer(); LPTSTR dot = strchr(p, ''。'');// 在这里添加使用p的代码if(p != NULL) *p = _T('')。

s。ReleaseBuffer();// 使用完后及时释放,以便能使用其它的CString成员函数。

在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象的任何方法。因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。

宽字符数组wchar_t的用法

其实么,你会用char就会用wchar_t啊,对你来说都是字符,只不过是不同的宽度罢了,用起来都是一样的,当然所有的地方都要加上w,wstring是宽字符的字符串,里面保存的就是类似wchar_t数组的东西,wifstream是宽字符的文件输入流,wcout是宽字符的标准输出流。下面这个程序运行以后读源代码文件本身,并且把第一行打出来,也就是打印://读我自己

main.cpp:

//读我自己

#include

using

std::wcout;

using

std::endl;

#include

using

std::wstring;

#include

using

std::wifstream;

int

main()

{

wifstream

fin("main.cpp");

wstring

str;

fin

str;

wcout

str

endl;

fin.close();

return

0;

}

(责任编辑:IT教学网)

更多

推荐浏览下载文章