从零开始的Linux运维屌丝之路,资源免费分享平台   运维人员首选:简单、易用、高效、安全、稳定、社区活跃的开源软件
  • 首页
  • Python
  • 17、python扩展知识二进制、十进制、十六进制

17、python扩展知识二进制、十进制、十六进制

发布:蔺要红04-15分类: Python


编码回顾:编码的种类
ASCII 占1个字节,只支持英文
GB2312 占2个字节,支持6700+汉字
GBK GB2312的升级版,支持21000+汉字
Shift-JIS 日本字符


由于每个国家都有自己的字符,所以其对应关系也涵盖了自己国家的字符,但是以上编码都存在局限性,即:仅涵盖本国字符,无其他国家字符的对应关系。应运而生出现了万国码,他涵盖了全球所有的文字和二进制的对应关系,

Unicode 2-4字节 已经收录136690个字符,并还在一直不断扩张中...


Unicode 起到了2个作用:

直接支持全球所有语言,每个国家都可以不用再使用自己之前的旧编码了,用unicode就可以了。(就跟英语是全球统一语言一样)
unicode包含了跟全球所有国家编码的映射关系

Unicode解决了字符和二进制的对应关系,但是使用unicode表示一个字符,太浪费空间。例如:利用unicode表示“Python”需要12个字节才能表示,比原来ASCII表示增加了1倍。

由于计算机的内存比较大,并且字符串在内容中表示时也不会特别大,所以内容可以使用unicode来处理,但是存储和网络传输时一般数据都会非常多,那么增加1倍将是无法容忍的!!!

为了解决存储和网络传输的问题,出现了Unicode Transformation Format,学术名UTF,即:对unicode中的进行转换,以便于在存储和网络传输时可以节省空间!

UTF-8: 使用1、2、3、4个字节表示所有字符;优先使用1个字符、无法满足则使增加一个字节,最多4个字节。英文占1个字节、欧洲语系占2个、东亚占3个,其它及特殊字符占4个
UTF-16: 使用2、4个字节表示所有字符;优先使用2个字节,否则使用4个字节表示。
UTF-32: 使用4个字节表示所有字符;


总结:UTF 是为unicode编码 设计 的一种 在存储 和传输时节省空间的编码方案。
 
二进制、十进制、十六进制

二进制:01
八进制:01234567
十进制:0123456789
十六进制:0123456789abcdef

>>> chr(35)  #ASCII码数字对应的值
'#'
>>> chr(50)  #ASCII码数字对应的值
'2'
>>> bin(2)  #二进制的2
'0b10'
>>> hex(2)  #16进制的2
'0x2'

>>> bin(100)  #二进制的
'0b1100100'
>>> hex(100)  16进制的
'0x64'
八进制
>>> oct(0)
'0o0'
>>> oct(1)
'0o1'
>>> oct(7)
'0o7'
>>> oct(8)
'0o10'
>>> oct(9)
'0o11'
十六进制 
0x前缀或者BH后缀都代表16进制
>>> hex(0)
'0x0'
>>> hex(1)
'0x1'
>>> hex(9)
'0x9'
>>> hex(10)
'0xa'
>>> hex(15)
'0xf'
>>> hex(16)
'0x10'
>>> s = '中国'
>>> s.encode('gbk')
b'\xd6\xd0\xb9\xfa'
>>> s.encode('utf8')
b'\xe4\xb8\xad\xe5\x9b\xbd'
#------------------------------------
中:在unicode里是G0-5650
国:在unicode里是G0-397A
#------------------------------------
GBK里  中:d6d0
d6    转   二进制
d               6
8  4  2  1      8  4  2  1
1  1  0  1      0  1  1  0
去掉二进制的第一位(16进制每4位占一个字节)
0  1  0  1      0  1  1  0  =  0+4+2+1=5  0+4+2+1=6
#-------------------------------------------
d0    转   二进制
d               0
8  4  2  1      8  4  2  1
1  1  0  1      0  0  0  0
去掉二进制的第一位
0  1  0  1      0  0  0  0  =  0+4+2+1=5  0+0+0+0=0
#-------总结:中:d6d0(GBK)转为16进制后,去掉首位、得出5650根据unicode对应关系表找到的为中这个字
 
温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,如有侵权我会在24小时之内删除!

欢迎使用手机扫描访问本站