奎克的藏经阁 · 原书印刷页

编码 隐匿在计算机软硬件背后的语言 · 第 315 页

PDF 物理页索引 331 · 编码隐匿在计算机软硬件背后的语言

书名
编码 隐匿在计算机软硬件背后的语言
作者
未记录
印刷页
315
PDF 物理页
331(从 0 开始)
章节
编码隐匿在计算机软硬件背后的语言
UUID
38270854-596f-4a26-8183-db8c968c6020
来源类型
original_book
页面 SHA-256
237acc80b19fcaa59c075d83afd0da8a0ed9e135495d71ccf7314d0f550346b3

像这样一段字符串:

$$
H e l l o , y o u !
$$

转换成ASCII码,用十六进制数表示如下:

$$
4 8 6 5 6 C 6 \mathrm { F } 2 \mathrm { C } 2 0 7 9 6 \mathrm { F } 7 5 2 1
$$

这段编码中,除了普通的字符,逗号(编码2C)、空格(编码20)和感叹号(编码21)容易遗漏,需要额外注意。我们再来看一个例子:

$$
I a m \ I 2 y e a r s o l d .
$$

它用 ASCII 码表示为:

49 20 61 6D 20 31 32 20 79 65 61 72 73 20 6F 6C 64 2E

有意思的是数字12的表示方法。在这段编码串中,它被表示成十六进制数31h和32h,也就是数字1和2的ASCII码的组合。当数字12以文本流的身份出现时,不应该用十六进制码 01h和 02h,或者BCD码12h,或者0Ch来表示。因为这些编码在 ASCII码中表示其他的意思。

在 ASCII码中,一个大写字母与其对应的小写字母的ASCII码值相差20h。这种规律大大简化了程序代码的编写,例如一段将特定的字符串变成大写的程序。假设有一个字符串存放在内存的某个区域,每个字符占据一个字节。下面是一段8080子程序,初始状态下字符串的首地址存放在寄存器HL中;寄存器C存放字符串的长度,也就是字符的个数。

Capitalize: MOV A, C ;c表示剩余的字符数CPI A, 00h ;与0进行比较JZ AllDone ;如果剩余的字符数为0,程序结束MOV A, [HL] ;取得下一个字符CPI A, 61h ;判断A代表的字符的ASCII码是否比a'小JC Skipit ;如果比a'小,就跳过CPI A, 78h ;判断是否比′z′大JNC SkipIt ;如果是,则跳过SBI A, 20h ;判断是否是小写,如果是,则减20hMOV [HL], A ;保存修改过的字符
SkipIt: INX HL ;指向下一个字符DCR C ;计数器减一

20 ASCII 码和字符转换

315