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

枫铃3年前 (2021-09-30)Python239

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

将bytes解析为整数,使用 int.from_bytes() 方法,并像下面这样指定字节顺序:

# 为了将bytes解析为整数,使用 int.from_bytes() 方法,并像下面这样指定字节顺序:
data = b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\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() 方法,并像下面这样指定字节数和字节顺序:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
x=69120565665751139577663547927094891008
# 如果byteorder为'big',则最重要的byte位于字节数组的开头。 如果byteorder为'little',则最重要的byte位于字节数组的末尾。
print(x.to_bytes(16,"little"))   # b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'
print(x.to_bytes(16,"big"))   # b'4\x00#\x00\x01\xef\xcd\x00\xab\x90x\x00V4\x12\x00'

试着将一个整数打包为字节字符串

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'\x03X\xf1\x82iT\x96\xac\xc7c\x16\xf3\xb9\xcf\x18\xee\xec\x91\xd1\x98\xa2\xc8\xd9R\xb5\xd0'

相关文章

Python中self的用法

Python中self的用法

在Python类中规定&...

python基础语法教程:行与缩进

缩进 使用缩进来表示代...

后悔没早知道这些Python特性

后悔没早知道这些Python特性

实际上,在日常的工作中,我们很多需求,无论是常见的、还是不常见的,Python 都为我们提供了一些独特...

Python基础教程:变量的使用

1.什么是变量ÿ...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。