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

如题。

不能表示中文,你可能错了吧,现在都是用WCHAR,宽字节来表示中文的,你是不是在程序里面弄错了。wchar是占两个字节的 。

另外,如果是中文,你用char来表示,肯定会丢失数据的,最后你要转换为wchar才可能正确显示中文追问

呃,C#中好像没有wchar, char chr = '中',然后Console.WriteLine(chr),显示也是确定的,应该没有丢失数据。

追答

c#没有这么严格,所以他自动内部处理了。这就是高级语言呀,越高级,对申明变量的控制越来越要求低了,内部自动帮你处理好了。sizeof肯定没有用呀,内部自动自动处理的,对齐上一个字符总是预留一个空白字节的,所以你sizeof还是1.估计是这个原因,内存分配上c#估计就是这样干的,对内存很不负责呀,浪费内存,虽然现在机器无所谓,但是毕竟对齐是个浪费内存的东西

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-22
C#中char是占两个字节的。追问

用Marshal.SizeOf((typeof(char));试了一下,但是返回结果是1,说明是只占一个字节啊。
糊涂了...

追答

直接用sizeof(char)返回2。据MSDN,Marshal.SizeOf得到的是非托管类型的大小,就是char在非托管代码中的大小。

本回答被提问者采纳
第2个回答  2011-10-22
char是字符类型,当然能表示中文喽
第3个回答  2022-05-03
还是我来回答吧。
因为c#的char是双字节,那么所有小于65536的字符,都可以直接用char来表示,而Unicode中的汉字,才只从19968到40959,其中最小的是19968,即汉字"一",然后最大的一开始只到40869,即"龥",其中留着40870到40959这些空余的码位,以方便发现新的汉字,好补上去,现在补了一些偏旁和异体字,已经补到40917了。但不论怎么说,这些早的汉字字符集,都完全可以用两个字节来表示。
最后说一下,现在中国汉字陆续扩大异体字范畴,现在早就超过10万个了,加上其他国家不同地区也在扩充码位,所以标准化组织还在不停往unicode里面塞字符。所以,c#的两字节已经早就不够用了,在新版的.net运行库里面,已经允许把一些超过65535的字符,用两个或者两个以上的char表示,我这几天也刚巧碰到了,具体怎么编码的,正在研究中。