[00305]字节到大整数的打包与解包

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

一、 解决问题

你有一个字节字符串并想将它解压成一个整数。或者,你需要将一个大整数转换为一个字节字符串

二、解决方案

int.from_bytes() / int.to_bytes()

三、代码说明

#!/usr/bin/env python

"""
使用场景:
    密码管理,文件加密中,网络
"""

data = b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'

print(len(data)) #->16
#二进制到大整数
print(int.from_bytes(data, 'little')) #->69120565665751139577663547927094891008
print(int.from_bytes(data, 'big'))    #->94522842520747284487117727783387188

#大整数到二进制
x = 94522842520747284487117727783387188
print (x.to_bytes(16, "big"))#->b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'
print (x.to_bytes(16, "little"))#->b'4\x00#\x00\x01\xef\xcd\x00\xab\x90x\x00V4\x12\x00'

"""
字节顺序规则(litter/big)
    指定了构建整数时的字节的低位高位的排列顺序
"""
x = 0x01020304
# 第一个参数表示要转换为多少位(3位存不小)
print (x.to_bytes(4, "big"))#->b'\x01\x02\x03\x04'
print (x.to_bytes(4, "little"))#->b'\x04\x03\x02\x01'

# 获取需要多少字节来存储这个值(big_length())
x = 523 ** 23

nbytes, rem = divmod(x.bit_length(), 8)
if rem:
    nbytes += 1


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'

四、关联知识

五、总结

六、代码地址

github地址:https://github.com/weichen666/python_cookbook
目录/文件:third_selection/learn_data_date_time_byte.py

七、参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值