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