Python 用两个字节表示一个数字
在Python中,使用两个字节表示从Python 用两个字节表示一个数字,python,python-2.7,Python,Python 2.7,在Python中,使用两个字节表示从0到65535的数字的最简单方法是什么 例如,十进制的300是二进制的0000000 100101100,而十六进制的012C 当我得到300时,我希望得到两个字节作为输出: 第一个是00101100(二进制表示) 第二个是00000001(二进制表示) 最简单的方法是什么?您可以使用&255(即按位和0b11111111)获得低位: 和高位,通过添加按位移位: >>> "{:08b}".format((300 >> 8) &
0
到65535
的数字的最简单方法是什么
例如,十进制的300
是二进制的0000000 100101100
,而十六进制的012C
当我得到300
时,我希望得到两个字节作为输出:
- 第一个是
(二进制表示)00101100
- 第二个是
(二进制表示)00000001
最简单的方法是什么?您可以使用
&255
(即按位和0b11111111
)获得低位:
和高位,通过添加按位移位:
>>> "{:08b}".format((300 >> 8) & 255)
'00000001'
有关按位运算符的更多信息,请参见,例如…我相信还有比这更好的方法,不过:
from struct import pack, unpack
unpack('BB', pack('H',300))
# gives (44, 1), the two bytes you were asking for
查看可用的字母代码是什么,还要注意字节顺序。我想您正在寻找
struct.pack
:
>>> import struct
>>> i = 300
>>> struct.pack("H",i)
',\x01'
如果,
是其ascii值-44。如中所述,您可以执行以下操作:
>>> 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'
这就是mybin=bin(300)[2:].zfill(16)!既然你已经有了一个整数,为什么还要费心转换成十六进制并返回呢?你是对的。我以为这就是问题所在。
>>> 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'