c#里面字符的存储问题,很奇怪,与C++中的不同。

ylc001 2004-07-23 09:50:41
c#中这样申明
ushort a = '贤';
那么a 的值为(10进制):36132

c++中同样的一段代码
unsigned short a = '贤';
那么a 的值为(10进制):45234

很奇怪ushort也是16位无符号整型,unsigned short也是16位无符号整型,为什么不同呢?


还有个问题:无聊我在哪种语言中这样操作
a ^ 32639
那得出的结果应该可以转换成为一个中文字符,但是总是转换成一个“口”,哪位知道怎么回事???
...全文
145 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
boythere 2004-07-23
  • 打赏
  • 举报
回复
附:C++采用的字符集可以在项目属性里设置。
boythere 2004-07-23
  • 打赏
  • 举报
回复
希望可以看出点什么。
一、Unicode Little Endian环境下,“贤”的内码是248D,;Unicode Big Endian环境下,“贤”的内码是8D24。十六进制的8D24正是十进制的36132。MSDN中有比较精确的定义如下: “Byte Ordering Byte ordering Meaning: big-endian The most significant byte is on the left end of a word. little-endian The most significant byte is on the right end of a word. ”这个是跨平台问题,不扯开了。
二、ASNI环境下,“贤”的内码是CFCD,十六进制的CFCD正是十进制的53197。
三、根据上文,45234这个编码好像是你的笔误。
四、十进制的32639是二进制的0111111101111111,和任何数位或操作后的结果为?1111111?1111111(?表示根据被操作数的对应位的值),即只能7F7F,FFFF,7FFF,FF7F。我们在ASNI下,中文的每一个字节首位皆为1,那运算结果都为FFFF,就无法显示正常字符了,即显示你的方框。
ylc001 2004-07-23
  • 打赏
  • 举报
回复
正是在vc.net中也是53197
而c#......
ylc001 2004-07-23
  • 打赏
  • 举报
回复
sorry 我忘记说了,我用的是vc.net 2003作为环境的
freefalcon 2004-07-23
  • 打赏
  • 举报
回复
猜想C#默认用的是unicode字符
C++中默认的是ansi字符(汉字便是GBK码)

你在vc6中照下面这样写
unsigned short a = L'贤';
cout << a << endl;
可以看到a的值也是36132,这就是Unicode编码

但不加L的话,不是你说的45234呀,而是53197,这是怎么回事?

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧