Python之字节到大整数的打包与解包

需求:处理一个拥有128位长的16个元素的字节字符串 

将bytes解析为整数,使用 int.from_bytes() 方法,并像下面这样指定字节顺序:
# 为了将bytes解析为整数,使用 int.from_bytes() 方法,并像下面这样指定字节顺序:
data = b'x00x124Vx00xx90xabx00xcdxefx01x00#x004'
print(len(data))  # 16
# 如果byteorder为'big',则最重要的字节位于字节数组的开头。 如果byteorder为'little',则最重要的字节位于字节数组的末尾。
print(int.from_bytes(data,"little"))   # 69120565665751139577663547927094891008
print(int.from_bytes(data,"big"))  # 94522842520747284487117727783387188
将一个大整数转换为一个字节字符串,使用 int.to_bytes() 方法,并像下面这样指定字节数和字节顺序:
x=69120565665751139577663547927094891008
# 如果byteorder为'big',则最重要的byte位于字节数组的开头。 如果byteorder为'little',则最重要的byte位于字节数组的末尾。
print(x.to_bytes(16,"little"))   # b'x00x124Vx00xx90xabx00xcdxefx01x00#x004'
print(x.to_bytes(16,"big"))   # b'4x00#x00x01xefxcdx00xabx90xx00V4x12x00'
试着将一个整数打包为字节字符串
x=523**23
# print(x.to_bytes(16,"little"))   # 报错:OverflowError: int too big to convert
# 解决:int.bit_length() 方法先判断需要多少字节位来存储这个值
print(x.bit_length())   # 208  意思是需要208个字节位存储
nbytes, rem = divmod(x.bit_length(), 8)
print(nbytes, rem)  # 26,0
if rem :
    nbytes+=1
print(nbytes, rem)  # 26,0
print(x.to_bytes(nbytes,"little"))   # b'x03Xxf1x82iTx96xacxc7cx16xf3xb9xcfx18xeexecx91xd1x98xa2xc8xd9Rxb5xd0'
 
原文地址:https://www.cnblogs.com/zzy-9318/p/10472026.html