python bytes转int_int与bytes的转换

C语言编程,一个int一般就是4个byte,使用&符号获取int变量的地址,就可以得到各个byte。而python不太一样,C编程看到的全是内存和地址,python编程更抽象,也更简单,不让我们去看底层的内存和地址,仅仅是对各种对象的操作。

bytes转换成int

int对象中有一个class method,专门用来从bytes对象到int对象:

>>> int.from_bytes(b'\xF1\x02\x03\x04', 'big')

4043440900

>>> int.from_bytes(b'\xF1\x02\x03\x04', 'big', signed=True)

-251526396

signed参数表示这个bytes对应的是有符号的数,或者无符号的int。

python不是C,int对象不受4个字节长度的限制:

>>> int.from_bytes(b'\xFF\xFF\xFF\xFF', 'big')

4294967295

>>> int.from_bytes(b'\xFF\xFF\xFF\xFF\x01\x02\x03\x04', 'big')

18446744069431493380

big参数表示的是字节序,分大段(big),也是网络序,即高字节位于低地址,另一个是小端(little),即高字节在高地址,x86 CPU使用的就是小端字节序。文本代码中使用b开头的bytes对象表达式,都是big模式。

>>> int.from_bytes(b'\xF1\x02\x03\x04', 'big')

4043440900

>>> int.from_bytes(b'\xF1\x02\x03\x04', 'little')

67306225

int转换成bytes

int对象有一个成员函数 to_bytes,可以用来将自己转换成bytes对象。

>>> (123).to_bytes(4, 'big')

b'\x00\x00\x00{'

>>> (123).to_bytes(4, 'little')

b'{\x00\x00\x00'

to_bytes函数第1个参数表示得到的bytes对象的长度,第2个参数表示字节序。同样,这个转换函数也有signed参数。如果参数不对,会有OverflowError异常抛出:

>>> (168).to_bytes(1, 'big', signed=False)

b'\xa8'

>>> (168).to_bytes(2, 'big', signed=True)

b'\x00\xa8'

>>> (168).to_bytes(1, 'big', signed=True)

Traceback (most recent call last):

File "", line 1, in

OverflowError: int too big to convert

第1个参数length,其实可以用比较大的数,然后用前面的0x00来判断,这个int转换成bytes后,需要多少个字节:

>>> (123456789).to_bytes(10, 'big')

b'\x00\x00\x00\x00\x00\x00\x07[\xcd\x15'

python做int和bytes的转换,就简单介绍如上。

-- EOF --

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值