社区
C语言
帖子详情
wchar_t加'L与不加'L'为何不同?
yangyira2
2007-05-04 03:29:23
#include <iostream>
using namespace std;
void main()
{
wchar_t w1=L'哀';
wchar_t w2='哀';
printf("%0x %0x",w1,w2);
}
为什么加'L'与不加'L'输出会不同?
...全文
1863
6
打赏
收藏
wchar_t加'L与不加'L'为何不同?
#include using namespace std; void main() { wchar_t w1=L'哀'; wchar_t w2='哀'; printf("%0x %0x",w1,w2); } 为什么加'L'与不加'L'输出会不同?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yangyira2
2007-05-06
打赏
举报
回复
不对啊!
我说的是加上'_TEXT' 运行的结果就跟没加'L'一样了
就是说:
WCHAR w1 = _TEXT('哀');//没被"经过预处理器后就是:wchar_t w1 = L'哀';"
wchar_t w2='哀';
printf("%0x %0x",w1,w2);
打印的结果是一样的.
珍惜生命远离CPP
2007-05-05
打赏
举报
回复
wchar_t w1=L'哀';//这个是unicode编码
wchar_t w2='哀';//这个是ascii编码
输出的时候对应的内码,自然不一样了/。
yutaooo
2007-05-05
打赏
举报
回复
c++ 标准上是采用 L 的。这个不是宏。
windows 下编程采用的是 _TEXT, _T 则是宏。 它用来选择合适的字符集。 这个选择依赖于你是否定义了 _UNICODE 或 _MBCS . 这些设置的选择可以在编译命令行, 工程选项中 等地方进行设置。
举个例子,如果选择 _UNICODE 的工程:
TCHAR ch = _TEXT('a');
经过预处理器后就是:
wchar_t ch = L'a';
yangyira2
2007-05-05
打赏
举报
回复
加'L'是不是就在定义_ U N I C O D E 宏呢?
因为我原代码能够编译成功,说明已经定义了_ U N I C O D E 宏.
但我加上'_TEXT' 运行的结果就跟没加'L'一样了.
_ U N I C O D E 宏的定义是怎样回事,是不是我系统自动定义(引如)的呢?
JFDream_15
2007-05-04
打赏
举报
回复
所以为了能够与UNICODE兼容,而又避免错误,最好使用_TEXT或者_T来修改字符串
JFDream_15
2007-05-04
打赏
举报
回复
1
来自<<WINDOWS核心编程>>:
字符串前面的大写字母L ,用于告诉编译器该字符串应该作为U n i c o d e 字符串来编译。当编译器将字符串置于程序的数据部分中时,它在每个字符之间分散插入零字节。
这种变更带来的问题是,现在只有当定义了_ U N I C O D E 时,程序才能成功地进行编译。我们需要另一个宏,以便有选择地在字符串的前面加上大写字母L 。
这项工作由_ T E X T 宏来完成,_ T E X T 宏也在T C h a r. h 文件中做了定义。
如果定义了_ U N I C O D E ,那么_ T E X T 定义为下面的形式:
#define _TEXT(x) L ## x
如果没有定义_ U N I C O D E ,_ T E X T 将定义为
#define _TEXT(x) x
使用该宏,可以改写上面这行代码,这样,无论是否定义了_ U N I C O D E 宏,它都能够正确地进行编译。如下所示:
TCHAR *szError=_TEXT("Error");
char
与w
char
_t(T
CHAR
)之间的相互转换
char
与w
char
_t(T
CHAR
)之间的相互转换 1、w
char
_t类型数据的初始化
char
类型数据的初始化就不再骜述了;只说一下w
char
_t类型的初始化: w
char
_t[] = L"我是w
char
_t类型的数据"; //w
char
_t类型数据初始化时前面需
加
上宏L 2、
char
与w
char
_t之间的转换
char
与w
char
_t类型数据之间的转换不能通过赋值的方...
string转w
char
_t*和QString转w
char
_t*
string转w
char
_t* 首先介绍下w
char
_t类型 一、w
char
_t类型的由来 我们知道
char
类型变量可以存储一个字节的字符,它用来保存英文字符和标点符号是可以的,但是对于汉字、韩文以及日文这样的字符却不可以,因为汉字、韩文以及日文每一个文字都占据两个字节,为了解决这个问题,c++提出了w
char
_t类型,称之为双字节类型,又称宽字符类型。 二、下面是一个范例 int main(int argc, w
char
_t* argv[]) { //使用setlocale函数将本机的语言设置为中文
c语言 w
char
_t,一个【w
char
_t】引发的学案
里面讲到了w
char
_t--------------------------------------------------------------Win OS 之 w
char
_t 与 ANSI/ISO C/CPP 之 w
char
_t:ANSI/ISO C/CPP 中 w
char
_t 表示长于 8-bit 的数据类型,至于多长,具体依赖实现。《Unicode 标准 4.0》如是说:“ANSI/IS...
【c++】w
char
_t的详细教程,关于w
char
_t使用wcout编译运行输出结果为空以及为乱码类似O的解决办法....
一、w
char
_t: 百度百科: w
char
_t是C/C++的字符类型,是一种扩展的存储方式。w
char
_t类型主要用在国际化程序的实现中,但它不等同于unicode编码。unicode编码的字符一般以w
char
_t类型存储。
char
是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,
char
型无法表示。 w
char
_t数据类型一般为16位或32位,但
不同
的C或C++库有
不同
的规定,如GNU Libc规定w
char
_t为32位,总之,w
char
_t所能表示的字符数远超ch
使用w
char
_t类型注意事项
比如对于汉字,韩文以及日文这样的字符,它们的每一个文字都占据两个字节,所以C++提出了w
char
_t类型,也称为双字节类型,或宽字符类型。
char
是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,
char
型无法表示。如果在使用w
char
_t过程中出现了一些问题,可以考虑添
加
编译选项-fshort-w
char
,看看能否解决。w
char
_t数据类型一般为16位或32位,所能表示的字符数远超
char
型。w
char
_t,宽字符,是C/C++的字符类型,是一种扩展的存储方式。
C语言
70,037
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章