任何人都可以告诉我,在c#中为什么char需要两个字节,尽管它可以存储在一个字节中。难道你不认为这是记忆的浪费。如果没有,那么如何使用额外的1字节? 用简单的话来说..请告诉我什么是额外8位的用途。!!
答案 0 :(得分:24)
虽然它可以存储在一个字节中
是什么让你这么想?
只需要一个字节来表示英语中的每个字符,但其他语言使用其他字符。考虑不同字母的数量(拉丁语,中文,阿拉伯语,西里尔语......),以及每个字母表中的符号数(不仅包括字母或数字,还包括标点符号和其他特殊符号)...世界上使用的成千上万个不同的符号!因此,一个字节永远不足以代表所有字节,这就是创建Unicode标准的原因。
Unicode有几种表示形式(UTF-8,UTF-16,UTF-32 ......)。 .NET字符串使用UTF-16,每个字符需要两个字节(实际上是代码点)。当然,两个字节仍然不足以代表世界上所有不同的符号;代理对用于表示U + FFFF
以上的字符答案 1 :(得分:5)
char关键字用于声明下表中指示的范围内的Unicode字符。 Unicode字符是16位字符,用于表示全世界大多数已知的书面语言。
http://msdn.microsoft.com/en-us/library/x9h8tsay%28v=vs.80%29.aspx
答案 2 :(得分:0)
Unicode字符。是的,我们有足够的空间用于英文字母的8位,但是当涉及到中文等时,它需要更多的字符。
答案 3 :(得分:0)
在C#中,char默认为16位Unicode字符。 Unicode支持比ASCII支持的字符集大得多的字符集。
如果记忆真的是一个问题,那么就SO如何使用8位字符进行讨论:Is there a string type with 8 BIT chars?
参考文献:
在C#的char数据类型:http://msdn.microsoft.com/en-us/library/x9h8tsay(v=vs.80).aspx
在Unicode上:http://en.wikipedia.org/wiki/Unicode
答案 4 :(得分:-1)
因为对于微软而言,utf-8可能还太小,无法考虑使用它