c#中char类型的大小

时间:2010-01-25 17:02:46

标签: c# .net character-encoding

只是想知道为什么我们在C#(.NET)中有char类型的2字节大小,而不像其他编程语言中的1字节?

6 个答案:

答案 0 :(得分:32)

char是C#中的unicode,因此可能的字符数超过255.所以你需要两个字节。

例如,扩展ASCII具有255个字符集,因此可以存储在一个字节中。这也是System.Encoding命名空间的全部目的,因为不同的系统可以有不同的字符集和字符大小。因此C#可以处理一个/四个/等。 char字节,但Unicode UTF-16是默认值。

答案 1 :(得分:23)

我猜测“其他编程语言”你的意思是C. C实际上有两种不同的char类型:charwchar_tchar可能只有一个字节,wchar_t不一定。

在C#(和.NET)中,所有字符串都以UTF-16编码为Unicode。这就是为什么.NET中的char表示单个UTF-16 代码单元,它可能是代码点或代理对的一半(实际上不是字符) ,然后)。

答案 2 :(得分:3)

实际上C#,或更准确地说CLR,char的大小与大多数其他托管语言一致。托管语言(如Java)往往更新,并且具有从头开始内置的unicode支持等项目。支持unicode字符串的自然扩展是具有unicode字符串。

C / C ++等旧语言仅以ASCII格式启动,后来才添加了unicode支持。

答案 3 :(得分:1)

因为C#字符串中的字符默认为Unicode的UTF-16编码,即2个字节(默认情况下)。

答案 4 :(得分:0)

因为.NET中的字符串被编码为2字节的Unicode字符。

答案 5 :(得分:0)

使用16位字符宽度的C#可能更多地与性能有关而不是其他任何东西。

首先,如果您使用UTF-8,您可以将每个角色都放在“正确”的空间中。这是因为UTF-8的宽度可变。 ASCII字符将使用8位,而较大的字符将使用更多。

但是可变长度字符编码在常见场景中鼓励 O(n)算法复杂化。例如。检索字符串中特定位置的字符。关于这一点已经进行了公开讨论。但最简单的解决方案是继续使用适合大多数charset的字符宽度,截断其他字符。现在你有一个固定的字符宽度。

严格来说,UTF-16也是一种可变宽度编码,因此C#(和Java就此而言)正在使用混合的东西,因为它们的字符宽度从不是32位。