为何使用不同byteorder转换单字节数据时结果一致?
数字与字节转换的疑问
数字转字节示例
print(int.to_bytes(65, length=1, byteorder='big')) # 该代码将数字转换为对应字符
结果:
A
字节转整数的疑问
使用以下代码转换字节为整数时,即使指定不同的byteorder,结果均为65,请问原因是什么?
print(int.from_bytes(b'A', byteorder='big', signed=True)) print(int.from_bytes(b'A', byteorder='little', signed=True))
结果:
65 65
原因解释
字节序(byteorder)是用来定义多字节数据的字节排列顺序的——只有当你处理2字节、4字节这类长度大于1的字节串时,字节的先后顺序才会影响解析结果。
但你现在转换的是单个字节(b'A'仅包含1个字节),单个字节根本不存在“排列顺序”的问题,不管指定大端(big)还是小端(little),它对应的就是ASCII值65,结果自然不会变化。
给你举个多字节的例子就能明白差异:比如把整数258转成2字节的字节串,大端和小端的输出完全不同:
# 大端:高位字节放在前面 print(int.to_bytes(258, length=2, byteorder='big')) # 输出 b'\x01\x02' # 小端:低位字节放在前面 print(int.to_bytes(258, length=2, byteorder='little')) # 输出 b'\x02\x01'
这时再用from_bytes解析,指定不同字节序就会得到不一样的结果:
print(int.from_bytes(b'\x01\x02', byteorder='big')) # 得到258 print(int.from_bytes(b'\x01\x02', byteorder='little')) # 得到513
简单说:只有字节串长度大于1时,byteorder参数才会生效,单字节数据不受这个参数影响。
内容的提问来源于stack exchange,提问作者user20144486
相关产品推荐
相关产品推荐

