需求:处理一个拥有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'