社区
C++ 语言
帖子详情
L前缀对字符来说到底意义着什么?
sosolife
2005-10-18 08:30:47
举个例:
wchar_t c1 = '金';
wchar_t c2 = L'金';
在运行时查c1,c2的值 居然不一样! c1的值为48624, c2的值为37329
希望有达人能解释一下这个L前缀到底带来的是什么? 有什么更深层的意义
...全文
516
24
打赏
收藏
L前缀对字符来说到底意义着什么?
举个例: wchar_t c1 = '金'; wchar_t c2 = L'金'; 在运行时查c1,c2的值 居然不一样! c1的值为48624, c2的值为37329 希望有达人能解释一下这个L前缀到底带来的是什么? 有什么更深层的意义
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
snowbirdfly
2005-10-19
打赏
举报
回复
L前缀表示宽字符常量或字符串。
也就是用UNICODE 字符串~~
建议楼主看看windows程序设计上面也有详细说明~~~
megaboy
2005-10-19
打赏
举报
回复
狂晕,现在国际上用得最多的不是unicode32,也不是unicode16,当然也不是utf8,而是鸟语!哈哈哈。
K
2005-10-19
打赏
举报
回复
学习了!
wohow
2005-10-19
打赏
举报
回复
国际上用的最多的不是Unicode32,因为标准通常是美国制定,而他们使用英语,所以他们认为使用Unicode16和Unicode32都很浪费,因此国际上用的最多的是UTF8。另外Unicode16收集中文不会溢出。
晨星
2005-10-19
打赏
举报
回复
楼上说得对,严格说不等同于“Unicode”。
ddmor
2005-10-19
打赏
举报
回复
L前缀表示宽字符字符串(UNICODE)。
比如:
char c[]="小明明a";
unsigned short wc[]=L"小明明a";
cout<<strlen(c)<<endl;//输出7,单字符长度
cout<<wcslen(wc)<<endl;//输出4,宽字符长度
return 0;
bruceteen
2005-10-19
打赏
举报
回复
简单的说:
不加L的是 multibyte character,加L的是wide-character。
有些人说 Unicode 是不对的,Unicode 是 wide-character 的一种,但不是唯一的一种,到底使用哪一个具体的宽字符集完全取决于编译器,比如VC++使用Unicode,但GCC则不.
另外,既然是wide-character,那么sizeof(wchar_t)也就未必等于2,要注意这一点.大家可以查看ISO C++98标准说明书.
再另外,windows和Java使用的unicode是unicode16,而国际上使用最广泛的,宣称有各种优点的unicode其实是unicode32,制定它们的组织不一样. unicode16连中文收集都会溢出,谈何通用?
FlyingKaka
2005-10-19
打赏
举报
回复
支持晨星大哥~
fiftymetre
2005-10-19
打赏
举报
回复
算了没什么好说的了,再怎么说,偶也只是照搬WINDOWS程序第二章的内容的呵呵。你还是去看看吧
fiftymetre
2005-10-19
打赏
举报
回复
不知道偶说的是到不到位啊。唉哟,容偶在想想中。。。
fiftymetre
2005-10-19
打赏
举报
回复
首先请楼主明白,在16位OS下这种JJWW的东西是相当烦人的。拿L来说事吧。在汇编中,分为远指针和近指针之分,在16位的OS下也有这种长,短,远,近之分。但现在在32位的OS中没有了这种长,短,远,近之分了,详情你可以看看WINDOWS程序设计的第二章UNICODE,里面讲的非常详细的。
Unicode的最大好处是这里只有一个字元集,而他的缺点便是Unicode字串占用的记忆体是ASCII字串的两倍。
char c = 'A' ; //变量c需要1个位元组来保存,并将用十六进位数0x41初始化,这是字母A的ASCII代码。
wchar_t c = 'A' ; //变量c是一个双位元组值0x0041,是Unicode表示的字母A
OK再看下面的
static wchar_t a[] = L"LOVE50MI" ;//该字串需要19个位元组的储存空间,sizeof (a) 将返回19。索引阵列a可得到单独的字元。a[0] 的值是宽字元「L」,或者0x004C。
wchar_t c = L'A' ;//你认为这个L有用吗?sosolife (大康) 嘿嘿这里的L是米有用啼C编译器会对该字元进行扩充,使它成为宽字元啼。
yajyjy
2005-10-19
打赏
举报
回复
_T("")和L""是一样的
晨星
2005-10-19
打赏
举报
回复
L打头的表示宽字符,这个不管是debug还是release都一样的,这是C++标准规定的。
不过对于非Ascii字符,C++标准似乎并未规定做编译器必须转换。因此不同的编译器可能结果不一样。就拿楼主的例子来说,如果使用gcc编译,估计结果就未必对。
因为如果要转换的话,编译器首先必须知道一些操作系统的区域设置信息。这一点在某些系统中可能是做不到的。
VC中是做了,因为VC目前只有Windows版,微软的人当然知道到哪里获得相关信息进行字符转换。
而某些Unix系统,通常依靠第三方组件来支持汉字库,那么编译器如何能知道“48624”是个GB汉字还是个其它国家文字呢?
wshcdr
2005-10-19
打赏
举报
回复
UP
wxrwan
2005-10-19
打赏
举报
回复
学习
NetsEagle
2005-10-19
打赏
举报
回复
和楼主一起学习
doway
2005-10-19
打赏
举报
回复
对哦。:)
sosolife
2005-10-19
打赏
举报
回复
引 bruceteen(周星星) "不加L的是 multibyte character,加L的是wide-character"
昨天看完了那个第二章 我现在也是这么理解的 通俗的说 '金' 和 L'金' 是用不同的编码方式表示的
不知道我理解得对不?
晚上来结贴..........
code_learner
2005-10-19
打赏
举报
回复
学习了,长知识~~~~~~~~~~~~
megaboy
2005-10-18
打赏
举报
回复
L前缀表示宽字符常量或字符串。
加载更多回复(4)
c++
字符
前面的L和_T
T是一个宏,如果项目使用了Unicode
字符
集(定义了UNICODE宏),则自动在
字符
串前面加上L,否则
字符
串不变。二、 _T宏可以把一个引号引起来的
字符
串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的...
【完虐算法】「
字符
串-最长公共
前缀
」5种方法脑洞大开
文章目录说在前面
字符
串 - 最长公共
前缀
案例 - 14....为什么拿出这个来说呢? 可怕的是,他居然给了 5 种解题方法。 更可怕的是,因此他直接少了一轮面试,天哪!! 今天顺便分享出来,作为「
字符
串」
c语言字母
意义
,C语言
字符
串前加L的
意义
如:L“A”
转自:...理论上,C中1个字节可比8位长,但对我们大多数人来说,1个字节(也就是1个char)是8位宽。C中的宽
字符
基于wchar_t数据型态,它在几个表头文件包括WCHAR.H中都有...
Python入门必学:
字符
串--r、f、u
前缀
的用途与差异
掌握Python
字符
串的r、f、u
前缀
,让你的代码更高级! 文章从Python
字符
串的r、f、u
前缀
入手,带你深入了解它们的用途与差异。原始
字符
串
前缀
r,让转义
字符
不再头疼;格式化
字符
串
前缀
f,轻松实现
字符
串的动态生成;...
MySQL
字符
串
前缀
索引详解
MySQL
字符
串
前缀
索引与全部索引的区别
C++ 语言
65,179
社区成员
250,527
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章