Go string深度理解之数据类型编码解码

文章标题

  • 1 整数存储
  • 2 字符存储
  • 3 汉字存储
  • 4 多种类型结合的字符的解码编码
    • 4.1 编码模板
    • 4.2 解码
    • 4.3 编码

1 整数存储

一个比特可以是0或是1,八个比特组成一个字节,全为0时代表0,全为1时代表255,即一个字节可以表示255个数字、两个字节可以表示65536个数字
Go string深度理解之数据类型编码解码_第1张图片

2 字符存储

通过字符集ASCII来进行中转
例如 A:先根据ASCII码将A转为 65 ,再转为二进制01000001,如下图所示
Go string深度理解之数据类型编码解码_第2张图片

3 汉字存储

ASCII字符集收录了128个字符,它的扩展字符集也只有256个,由此生出了GB2312来存储,但没有繁体字,又由此生出了BIG5,这样一直不断推出收录更多字符的字符集,不如制作一个通用的字符集,因此unicode字符集诞生了

Go string深度理解之数据类型编码解码_第3张图片

4 多种类型结合的字符的解码编码

汉字使用Unicode编码,Unicode它为每种语言中的每个字符设定了统一且唯一的二进制编码,以满足跨语言、跨平台的要求

4.1 编码模板

注意:编号区间就为对应得十进制区间

编号 编码模板 字符大小
[0, 127] 0xxxxxxx 1个字符
[128, 2047] 110xxxxx 10xxxxxx 2个字符
[2048, 65535] 1110xxxx 10xxxxxx 10xxxxxx 3个字符

4.2 解码

不知道对应的汉字的 Unicode 十进制编码的可以在这网站在线查找
汉字字符集编码查询
Go string深度理解之数据类型编码解码_第4张图片

例如:01001000 11100110 10011101 10101000

一个一个来解:
01001000这个字节最高位是0,那他就占用了一个字符,对照编码模板:除去标识位0,那剩余得7位就是该字符得二进制编号,1001000 对应十进制72对应字符H

11100110 这个字节以1110开头,那他就占用了三个字节,它要和后面两个以10开头得字节共同表示一个字符。如下为解码过程:

11100110 10011101 10101000 套入模板得:除去标识位1110 10 10 将剩下得三部分组合起来就得到了该字符得二进制编号01100111 01101000 ,它对应得十进制为 26472 对应汉字 杨

最后解码后为: H杨

4.3 编码

例:对 h鸡 进行编码,鸡对应得Unicode编码为40481
Go string深度理解之数据类型编码解码_第5张图片
h:h对应十进制ASCII码为 104 ,根据编码模板,它是在区间编号[0, 127]范围内,即使用 0xxxxxxx 编码模板,带入得 01101000

鸡:该汉字对应的Unicode编码为40481,它是在区间编号[2048, 65535]范围内,即使用 1110xxxx 10xxxxxx 10xxxxxx 编码模板,40481的二进制为1001111000100001,带入得 11101001 10111000 10100001

最后编码后为:01101000 11101001 10111000 10100001

01101000 | 11101001 10111000 10100001
       h                              鸡

第一段表示h,第二、三、四段表示鸡

你可能感兴趣的:(Golang,golang,go)