首页 > 其他 > 详细

编码中的大端序和小端序

时间:2020-08-22 10:40:58      阅读:80      评论:0      收藏:0      [点我收藏+]
 
UTF-16和UTF-32,在计算机上存储字节的时候就分为大端和小端序
 
例如‘?‘,这个字符对应的unicode 为300
那么这个字符用utf-16编码后,字节是什么样的
 
 
ord(?)  # 300
 
?.encode(utf-16)
# b‘\xff\xfe,\x01‘
 
hex(ord(,))  # 0x2c
 
# 所以得到的是 b‘\xff\xfe\x2c\x01‘
 
?.encode(utf-16le)
# b‘\x2c\x01‘
 
?.encode(utf-16be)
# b‘\x01\x2c‘

 

 
就300而言,对应的16进制为 12c,对应的二进制为?0001 0010 1100?
300
?0001 0010 1100?  (12c)
0000 ?0001 0010 1100?
0   1   2   c
 
在没有超过2个字节存储范围时,utf-16最后的编码结果大致和16进制相同
如果是大端存储,\x01\x2c
如果是小端存储,\x2c\x01
当得到的是小端存储,想转换为整数,必须调个顺序,仅在2个字节内调顺序,不是以整体来调顺序
 
以 ??为例,这个字用utf-16编码,必须用4个字节(utf-16可以用2个或者4个字节,一般的字符都是用2个)
 
s = ??
 
s.encode(unicode_escape)  # 这个字符对应的unicode码
# b‘\\U0002a6a5‘
# 把这个看成16进制,对应的十进制为 173733
 
s.encode(utf-16le)
# b‘i\xd8\xa5\xde‘
# b‘\x69\xd8\xa5\xde‘
s.encode(utf-16be)
# b‘\xd8i\xde\xa5‘
# b‘\xd8\x69\xde\xa5‘
 
# 充分说明了两点
# 第一,utf-16 大小端,仅在2个字节内倒序
# 第二,utf-16存储4个字节时,和unicode码对应的十六进制不同
 
hex(ord(i))  # ‘0x69‘
 
s.encode(utf-32le)
# b‘\xa5\xa6\x02\x00‘
 
s.encode(utf-32be)
# b‘\x00\x02\xa6\xa5‘
 
# 说明 utf-32,存储4个字节时,和unicode码对应的十六进制大致相同
# utf-32,大小端,在4个字节内倒序

 

http://www.unicode.org/cgi-bin/GetUnihanData.pl?codepoint=2A6A5

 

Glyphs

The Unicode Standard (Version 3.2)Your Browser
技术分享图片 ??

 

 

Encoding Forms

DecimalUTF-8UTF-16UTF-32
173733 F0 AA 9A A5 D869 DEA5 0002A6A5


 
 

编码中的大端序和小端序

原文:https://www.cnblogs.com/zhouww/p/13544270.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!