如何在Python中将整数值转换为四个字节的数组
我需要在Python中发送一个字节消息,并且我想把一个无符号整数转换成字节数组。请问怎么把一个整数值转换成四个字节的数组呢?就像在C语言中那样:
uint32_t number=100;
array[0]=(number >>24) & 0xff;
array[1]=(number >>16) & 0xff;
array[2]=(number >>8) & 0xff;
array[3]=number & 0xff;
有人能教我怎么做吗?一开始我觉得没有类型的编程很奇怪。
7 个回答
41
看看 struct
模块。你可能只需要用 struct.pack("I", your_int)
把整数打包成一个字符串,然后把这个字符串放进消息里。这里的格式字符串 "I"
表示一个无符号的32位整数。
如果你想把这样的字符串解包成四个整数的元组,可以使用 struct.unpack("4b", s)
:
>>> struct.unpack("4b", struct.pack("I", 100))
(100, 0, 0, 0)
(这个例子显然是在小端机器上运行的。)
46
这个帖子有点旧了,不过在Python 3.2及以上版本中,你现在可以简单地这样写:
number = 100
number.to_bytes(4, byteorder = 'big')
或者根据你的需要写成 byteorder = 'little'
。详细说明可以在这里找到。
18
Sven 给出了答案。不过,在 Python 中也可以通过字节移动的方式来处理数字,就像你问题中提到的那样:
>>> [hex(0x12345678 >> i & 0xff) for i in (24,16,8,0)]
['0x12', '0x34', '0x56', '0x78']