在 ASCII 中有多少位代表一个字符,多少位代表一个字节?

How many Bits represent ONE character and How many Bits represent One Byte in ASCII?

我知道很简单,但我还是不会。有些人说三个是代表一个字符的 7 位,有些人说是 8 位。所以谁能告诉我哪个是正确的?如果是 8 Bits/Character 那么多少位代表一个字节?如果是 7 那么有多少位代表一个字符,多少位代表一个字节?

US-ASCII 确实是每个字符 7 位。最高代码的值为 127,表示 DEL 控制字符。任何具有更高值代码的字符集都不是 US-ASCII(但可能是它的扩展,例如 Unicode)。

大多数微处理器使用八位字节(=最小可寻址存储单元)。如果你想在这些微处理器上使用 US-ASCII,你有两个选择:

  • 使用 7 个字节(每个 8 位)来存储 8 个字符(每个 7 位),即使这会使程序非常复杂。
  • 使用 1 个字节(8 位)存储 1 个字符(7 位),即使您会浪费 space。

在这种情况下,对简单程序的需求超过了对高效内存使用的需求。这就是为什么您通常使用一个 8 位单元(简称为八位字节)来存储一个字符,即使每个字符仅以 7 位单元编码。您只需将额外位设置为零(或者,就像在某些情况下所做的那样,使用额外位进行错误检测)。

我知道这是一个老问题,但为了未来的读者;您可以通过以下 (C# .NET) 确定给定字符串(或字符串值)中有多少字节:

Encoding.ASCII.GetByteCount("SomeString");

请记住在尝试计算字节数时使用正确的编码,因为每种编码都不同:

  • An ASCII character in 8-bit ASCII encoding is 8 bits (1 byte), though it can fit in 7 bits.
  • An ISO-8895-1 character in ISO-8859-1 encoding is 8 bits (1 byte).
  • A Unicode character in UTF-8 encoding is between 8 bits (1 byte) and 32 bits (4 bytes).
  • A Unicode character in UTF-16 encoding is between 16 (2 bytes) and 32 bits (4 bytes), though most of the common characters take 16 bits. This is the encoding used by Windows internally.
  • A Unicode character in UTF-32 encoding is always 32 bits (4 bytes).
  • An ASCII character in UTF-8 is 8 bits (1 byte), and in UTF-16 - 16 bits.
  • The additional (non-ASCII) characters in ISO-8895-1 (0xA0-0xFF) would take 16 bits in UTF-8 and UTF-16.