c#中char类型的大小

Man*_*ani 37 .net c# character-encoding

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

Jan*_*oom 33

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

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

  • 由于Unicode是一个21位代码,所以说这就是你需要两个字节的原因. (13认同)
  • 字符表示使用UTF-16,这意味着每个字符使用至少16位或2字节(甚至ASCII字符,只需要7位).如果unicode值足够大,那么打印到屏幕上的单个字符实际上需要两个`char`s. (2认同)
  • 本回答中的第一句忽略了可变宽度字符的存在. (2认同)
  • 如果大小是 2 字节或 16 位,那么它只能保存十进制代码点小于 2^16 = 65536 的字符。如果我想存储一些代码点大于该值的字符怎么办?即表情符号 (2认同)
  • @AnkushJain https://www.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/char/src/tpc/db2z_utf.html 这可能会让您清楚一些。UTF-16 意味着每个字符不完全是 2 个字节,而是至少 2 个字节。一个字符可能占用超过 2 个字节。 (2认同)

Joe*_*oey 25

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

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


Jar*_*Par 5

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

像 C/C++ 这样的老语言一开始只支持 ASCII,后来才添加了 unicode 支持。