问题
将一个字节字符串解压成一个整数。或者将一个大整数转换为一个字节字符串。
解决方案
假设程序需要处理一个拥有128位长的16个元素的字节字符串。比如:
data = b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'
将字节字符串(bytes)
解析为整数,使用 int.from_bytes()
方法,并可以指定字节顺序:
print(len(data))
print(int.from_bytes(data, 'little'))
print(int.from_bytes(data, 'big'))
16
69120565665751139577663547927094891008
94522842520747284487117727783387188
将一个大整数转换为一个字节字符串,使用 int.to_bytes() 方法,并像下面这样指定字节数和字节顺序:
x = 94522842520747284487117727783387188
print(x.to_bytes(16, 'little'))
print(x.to_bytes(16, 'big'))
b'4\x00#\x00\x01\xef\xcd\x00\xab\x90x\x00V4\x12\x00'
b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'
讨论
大整数和字节字符串之间的转换操作并不常见。 然而,在一些应用领域有时候也会出现,比如密码学或者网络。 例如,IPv6网络地址使用一个128位的整数表示,从数据记录中提取这样的值时,就会用到。
网友评论