ASCII table 和字符表示

ASCII table and character presentation

我们在 class 中学习了 ASCII table,并且 128 个字符中的每个字符都有一个 0-128 的唯一数字表示它。 例如 "a" 是 97(二进制 97 是 1100001)。 “%”是 37(二进制 37 是 0100101)。 (据我所知,对于固定长度 7,我们应该允许二进制数以 0 开头)

如果97代表"a",那么字符串“97”代表什么?整数 97 代表什么?

嗯,字符串“97”由两个字符组成,因此需要两个 ascii 码,一个代表“9”,另一个代表“7”。

所以答案是57和55

仅当我们使用 char 或将任何 unsigned int 值强制转换为 char 时,才会返回 ASCII 值。因此,根据您的问题,97 可以用 int 数据类型表示。但是如果你想要 97 作为字符而不是你应该写下面的代码:

char c[2], i;
c[0]=57;
c[1]=55;
for (i=0; i<2; i++) printf("%c", c[i]);

我认为你的问题是基于这样的概念,即给定整数、字符串或其他类型值的表示,你可以确定类型和值。你不能。

在大多数数字计算机体系结构中,数据是位,以连续的 8 位字节访问。您可以取一个字节,将其视为一个非负整数,并用二进制、八进制、十进制、十六进制等表示它。当一个位本身代表一个值时使用二进制。十六进制是首选,因为它紧凑且易于转换为二进制。当整个字节对人类具有一些基数值时,使用十进制,这使得它成为负整数的选择。

那么,给定字节 97(十进制),比如来自 1 字节文件或内存地址,类型和值是什么?唯一的了解方式是通过某种共同的理解:协议、声明、约定、规范、数据映射等。换句话说,沟通。完整的通信由数据和指示如何解释字节的伴随或单独的元数据组成。

97₁₀ = 61₁₆ = 01100001₂ 可以是:

  • 作为 8 位无符号整数:97₁₀
  • 作为 8 位二进制补码有符号整数:97₁₀
  • 作为UTF-8编码单元:恰好是Unicode代码点的所有编码单元:'a' (U+0061) 'LATIN SMALL LETTER A'
  • 作为一个ASCII码单元:(所有ASCII码点都占一个8位码单元):'a'
  • 作为 ISO 8859-1 代码单元:(所有 ISO 8859-1 代码点采用一个 8 位代码单元):'a'
  • 任何可以打包成 8 位的东西。

因此,将您的问题改写为:代表 "a" 的 97 和代表整数 97 的 97 有什么区别?答案在元数据中,而不是字节中。