Python使用两个字节表示从0
到65535
的数字的最简单方法是什么?
例如,十进制中的300
为二进制0000000100101100
,十六进制为012C
。
当我得到300
时,我想要的输出是两个字节:
00101100
(二进制表示)00000001
(二进制表示)最简单的方法是什么?
答案 0 :(得分:4)
我确信有更好的东西,但是:
from struct import pack, unpack
unpack('BB', pack('H',300))
# gives (44, 1), the two bytes you were asking for
请参阅python docs以了解可用的字母代码,同时注意字节顺序。
答案 1 :(得分:1)
您可以使用& 255
获取低位(即按位AND与0b11111111
):
>>> "{:08b}".format(300 & 255)
'00101100'
通过添加按位移位和高位:
>>> "{:08b}".format((300 >> 8) & 255)
'00000001'
有关按位运算符的详细信息,请参阅例如the Python wiki
答案 2 :(得分:1)
我认为您正在寻找struct.pack
:
>>> import struct
>>> i = 300
>>> struct.pack("H",i)
',\x01'
其中,
是其ascii值 - 44。
答案 3 :(得分:1)
如this SO answer所述,您可以执行以下操作:
>>> my_hexdata = hex(300)
>>> scale = 16 ## equals to hexadecimal
>>> num_of_bits = 16
>>> mybin = bin(int(my_hexdata, scale))[2:].zfill(num_of_bits)
>>> mybin
'0000000100101100'
>>> mybin[:8]
'00000001'
>>> mybin[8:16]
'00101100'