一个char的UNICODE互换的怪问题。

xiaoming851 2007-07-12 05:13:38
代码如下:
char cn = '識';
long uc = 16775676;
MessageBox.Show(":" + uc + ":" + (char)uc + ":" + (long)cn + ":");

输出结果:
:16775676:識:35672:



按理说(long)cn的值应该是16775676,可为什么变成了35672?

谢谢达人!
...全文
631 28 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
cancerser 2007-07-12
  • 打赏
  • 举报
回复
这样就结了,我刚找出解法,看来算了~
viena 2007-07-12
  • 打赏
  • 举报
回复
16775676对65536(2的16次方)取余是35672而以,而16775676任意加减65536的倍数,效果也一样~
viena 2007-07-12
  • 打赏
  • 举报
回复
35672加上65536的整数倍得到的数,强制转换为char,得到的都是相同的'識'
sd5923150 2007-07-12
  • 打赏
  • 举报
回复
我再补充一下 啊
char:存储16位Unicode字符。Char变量的最小可能值为值为0的Unicode字符,最大可能值为值为655535的Unicode字符。
long:存储64位带符号整数。long变量的最小可能值为-9223372036845775808,最大可能值为9223372036845775807。

那你自己去算算吧
viena 2007-07-12
  • 打赏
  • 举报
回复
结贴点管理,给分输入密码就可以了

long是64位整数
你把16775676这个数放到long里面,恰好它的低16位是35672而以
而低16位是35672的long型整数多到你数几辈子都数不清
sd5923150 2007-07-12
  • 打赏
  • 举报
回复
是啊。你那显示转换的时候,长度如果不同,多出部分会被截取掉的。
而且我也同意 viena() 维也纳() 的观点,并不是每个数据类型转换都是可逆的

而且在C#中还可以通过隐性转换(不会造成数据丢失)或显性转换(可能造成数据丢失或降低精确度)来改变数据类型。

你去看看数据类型的资料吧。
xiaoming851 2007-07-12
  • 打赏
  • 举报
回复
在问个问题,怎么结贴?
-_-#
cancerser 2007-07-12
  • 打赏
  • 举报
回复
学习下 try中……
xiaoming851 2007-07-12
  • 打赏
  • 举报
回复
to 维也纳:
谢谢,我记住了!!非常感谢你的回答!结贴!
viena 2007-07-12
  • 打赏
  • 举报
回复
没有办法
viena 2007-07-12
  • 打赏
  • 举报
回复
谁告诉你所有的转换都是可逆的?
xiaoming851 2007-07-12
  • 打赏
  • 举报
回复
to 维也纳:
那就是说已经没有办法从'識'字获得16775676了???
xiaoming851 2007-07-12
  • 打赏
  • 举报
回复
to Macosx:
那就是说已经没有办法从'識'字获得16775676了???
viena 2007-07-12
  • 打赏
  • 举报
回复
你把代码代改成这样就知道了,实际上从long到char的强制转换,是会发生溢出的,高位信息都被丢掉了
char cn = '識';
long uc = 16775676;
MessageBox.Show(":" + uc + ":" + checked((char)uc) + ":" + (long)cn + ":");


另外 16775676用int可以放得下的,没必要用long
Macosx 2007-07-12
  • 打赏
  • 举报
回复
viena一语中的
xiaoming851 2007-07-12
  • 打赏
  • 举报
回复
to 维也纳:
我通过javascript里边的 String.fromCharCode(16775676) 得到了字符'識',并且在C#里边强制类型转换也可以得到'識',我想一定可以通过'識'字符反像获得16775676,你觉得呢?
viena 2007-07-12
  • 打赏
  • 举报
回复
//按理说(long)cn的值应该是16775676
你按的什么理?

char是Unicode字符,16位两个字节,值的范围0到65535

16775676强制转换为char,是丢掉了高位而以,已经丢失信息了,怎么可能还原?
xiaoming851 2007-07-12
  • 打赏
  • 举报
回复
to 杨东:
谢谢你,可是你给的例子我看不大明白,望指教。
xiaoming851 2007-07-12
  • 打赏
  • 举报
回复
to 维也纳:
你好,我是说我通过16775676得到了字符'識',现在我怎么通过字符'識'得到16775676这个值?
viena 2007-07-12
  • 打赏
  • 举报
回复
它的值就是35672啊
加载更多回复(8)

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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