Skip to content

Latest commit

 

History

History
52 lines (32 loc) · 2.73 KB

File metadata and controls

52 lines (32 loc) · 2.73 KB

字符与字符串

ASCII码

  • 将数字、字母、符号共128个字符用7位二进制编码表示
  • 可印刷字符: 32-126, 其余为控制、通信字符

汉字的表示和编码

GB 2312-80

  • 汉字+各种符号共7445个
  • 区位码: 用两个字节表示一个汉字, 每字节用七位码, 并将汉字和图形符号排列在一个94行94列的二维代码表中. 区位码是4位十进制数, 前2位是区码, 后2位是位码
  • 国标码 = (区位码)16 + 2020H
  • 汉字内码 = (国标码)16 + 8080H

为什么要加上2020H和8080H

https://blog.csdn.net/zrf2112/article/details/50718684

  • 为啥要将区位码转化为国标码?
    • 汉字编码之前, 已经有了标准的ASCII, 开发者只沿用了ASCII中32个控制字符其他ASCII被覆盖. 通过32D=20H的关系, 不难发现, 加上2020H是为了绕开ASCII的控制字符
  • 为啥要将国标码转化为机内码?
    • 国标码中除了前面32个控制字符外, 其他ASCII内容被覆盖, 这使得使用者在使用采用ASCII码编码的网页或者文本内容时不能兼容, 只能看到乱码. 为了解决这个问题要在国标码的基础上补充ASCII的32个控制字符外的其他字符. 已知道标准的ASCII码最高位为0, 国标码的最高位也是0. 那么只需要在国标码的基础上将最高位改为1即可. 通过10000000B=80H的关系, 不难发现, 加上8080H是为了在国标码基础上解决ASCII字母等符号的兼容性问题

流程

  • 输入: 输入编码, 如“内”汉字, 举个例子, 输入编码为“nei2”, 将输入编码转化为国标码, 在通过系统软件将国标码转化为机内码存储在计算机中
  • 输出: 汉字字形码. 先将机内码转化为国标码, 再转化为字形码

字符串

  1. 某计算机按字节编址(每个字节对应1B), 从地址为2的单元开始, 存储字符串“abc”
61H 62H 63H 00H

很多语言中, 将'\0'作为字符串结束的标志

  1. 某计算机按字节编址(每个字节对应1B), 从地址为2的单元开始, 存储字符串“abc啊”. “啊”的机内码为B0 A1H

在所有计算机中, 多字节数据都被存放在连续的字节序列中. 根据数据中各字节排列顺序的不同, 可能有“大端模式”和“小端模式”

  • 大端模式: 将数据的最高有效字节存放在低地址单元中
61H 62H 63H 00H B0H A1H 00H
  • 小端模式: 将数据的最高有效字节存放在高地址单元中
61H 62H 63H 00H A1H B0H 00H