C#中的char在内存中占一个字节,为什么它能表示中文? 中文应该占2个字节啊~~

如题。... 如题。 展开
 我来答
pengyun1314123
2011-10-22 · TA获得超过1458个赞
知道小有建树答主
回答量:1049
采纳率:0%
帮助的人:519万
展开全部
不能表示中文,你可能错了吧,现在都是用WCHAR,宽字节来表示中文的,你是不是在程序里面弄错了。wchar是占两个字节的 。

另外,如果是中文,你用char来表示,肯定会丢失数据的,最后你要转换为wchar才可能正确显示中文
追问
呃,C#中好像没有wchar, char chr = '中',然后Console.WriteLine(chr),显示也是确定的,应该没有丢失数据。
追答
c#没有这么严格,所以他自动内部处理了。这就是高级语言呀,越高级,对申明变量的控制越来越要求低了,内部自动帮你处理好了。sizeof肯定没有用呀,内部自动自动处理的,对齐上一个字符总是预留一个空白字节的,所以你sizeof还是1.估计是这个原因,内存分配上c#估计就是这样干的,对内存很不负责呀,浪费内存,虽然现在机器无所谓,但是毕竟对齐是个浪费内存的东西
是流他15
2011-10-22 · 超过24用户采纳过TA的回答
知道答主
回答量:94
采纳率:0%
帮助的人:76.3万
展开全部
C#中char是占两个字节的。
追问
用Marshal.SizeOf((typeof(char));试了一下,但是返回结果是1,说明是只占一个字节啊。
糊涂了...
追答
直接用sizeof(char)返回2。据MSDN,Marshal.SizeOf得到的是非托管类型的大小,就是char在非托管代码中的大小。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
houyanfei20099
2011-10-22 · TA获得超过249个赞
知道小有建树答主
回答量:475
采纳率:0%
帮助的人:324万
展开全部
char是字符类型,当然能表示中文喽
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
星际足联
2022-05-03 · TA获得超过313个赞
知道答主
回答量:94
采纳率:33%
帮助的人:8.2万
展开全部
还是我来回答吧。
因为c#的char是双字节,那么所有小于65536的字符,都可以直接用char来表示,而Unicode中的汉字,才只从19968到40959,其中最小的是19968,即汉字"一",然后最大的一开始只到40869,即"龥",其中留着40870到40959这些空余的码位,以方便发现新的汉字,好补上去,现在补了一些偏旁和异体字,已经补到40917了。但不论怎么说,这些早的汉字字符集,都完全可以用两个字节来表示。
最后说一下,现在中国汉字陆续扩大异体字范畴,现在早就超过10万个了,加上其他国家不同地区也在扩充码位,所以标准化组织还在不停往unicode里面塞字符。所以,c#的两字节已经早就不够用了,在新版的.net运行库里面,已经允许把一些超过65535的字符,用两个或者两个以上的char表示,我这几天也刚巧碰到了,具体怎么编码的,正在研究中。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式