文本在计算机中的表示

「CSAPP」学习

现在大多数系统使用ASCII来表示文本字符(非英文字符可能使用的是其他的编码方式)。

如一段非常熟悉的代码

#include <stdio.h>

int main() {
  printf("hello, world\n");
  return 0;
}

用vim以二进制方式打开这个文件

00000000: 2369 6e63 6c75 6465 203c 7374 6469 6f2e  #include <stdio.
00000010: 683e 0a0a 696e 7420 6d61 696e 2829 207b  h>..int main() {
00000020: 0a20 2070 7269 6e74 6628 2268 656c 6c6f  .  printf("hello
00000030: 2c20 776f 726c 645c 6e22 293b 0a20 2072  , world\n");.  r
00000040: 6574 7572 6e20 303b 0a7d 0a              eturn 0;.}.

我们发现文本内容将以16进制显示了出来,我们知道一个字节是8比特,所以两个16进制位表示一个字节(16*16=2^8)。

我们看开头的2369,23是第一个字节,69是第二个字节。0x23从16进制换成10进制是35,对应ASCII的"#",同理,0x69对应10进制105,对应ASCII的"i"

剩下的同理,对照ASCII码,就能把对应的字节转换为文字了。

发表于 2019.03.21