社区
C#
帖子详情
一个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
打赏
收藏
一个char的UNICODE互换的怪问题。
代码如下: char cn = '識'; long uc = 16775676; MessageBox.Show(":" + uc + ":" + (char)uc + ":" + (long)cn + ":"); 输出结果: :16775676:識:35672: 按理说(long)cn的值应该是16775676,可为什么变成了35672? 谢谢达人!
复制链接
扫一扫
分享
转发到动态
举报
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)
字符与
Char
code
互换
字符与
Char
code
互换
字符与
Char
code
互换
字符与
Char
code
互换
字符与
Char
code
互换
Unicode
与中文
互换
相关
自己编写的中文与
Unicode
相互装换,很方便的
普通字符与
Unicode
代码
互换
实现普通字符与
Unicode
编码
互换
,在C++Builder2010开发环境中
GBK,
unicode
,utf-8 conversion.rar
查了很多资料,总结一份这三个类型互转的函数,语言用c语言写,工程用visual studio写的,没有的话把相关c文件复制出来用就好
C#全角和半角
互换
最近搞.net 无聊了上传些小例子。
C#
111,093
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章