将int分隔成字节(无字符串)Python 2

时间:2018-02-13 15:25:53

标签: python int hex

基本上我想分隔一个int,让我们说77121980或多或少具有以下结构(0x04,0x98,0xc9,0xbc)No Strings。或者至少(4,152,201,188)。但到目前为止我只找到了像hex()

这样的方法

2 个答案:

答案 0 :(得分:3)

在python 3中,您可以使用int.to_bytes

>>> (77121980).to_bytes(4, 'big')
b'\x04\x98\xc9\xbc'

如果您想要值:

>>> _bytes = (77121980).to_bytes(4, 'big')
>>> tuple(_bytes)
(4, 152, 201, 188)

如果您使用的是python 2,则可以使用宽度有限的struct.pack(请参阅打包possibilities):

>>> import struct
>>> struct.pack('>i', 77121980)
b'\x04\x98\xc9\xbc

答案 1 :(得分:0)

您可以使用二进制&和bitshift运算符

i = 77121980
b = []
while i > 0:
    b.append(i & 0xff)
    i >>= 8
b = b[::-1]

b           # [4, 152, 201, 188]

从原始数字开始,这会将最右边的字节附加到列表b,然后向右移动,直到没有更多位移位。由于我们从右到左收集字节,因此结果列表的顺序相反,但您可以使用切片或reversed轻松翻转它。