【发布时间】:2015-04-02 10:16:51
【问题描述】:
在 Python 中使用两个字节表示从 0 到 65535 的数字的最简单方法是什么?
例如,十进制的300 是二进制的0000000100101100 和十六进制的012C。
当我得到300 时,我想得到的输出是两个字节:
- 第一个是
00101100(二进制表示) - 秒是
00000001(二进制表示)
最简单的方法是什么?
【问题讨论】:
标签: python python-2.7
在 Python 中使用两个字节表示从 0 到 65535 的数字的最简单方法是什么?
例如,十进制的300 是二进制的0000000100101100 和十六进制的012C。
当我得到300 时,我想得到的输出是两个字节:
00101100(二进制表示)00000001(二进制表示)最简单的方法是什么?
【问题讨论】:
标签: python python-2.7
不过,我确信还有比这更好的东西:
from struct import pack, unpack
unpack('BB', pack('H',300))
# gives (44, 1), the two bytes you were asking for
请参阅python docs 了解可用的字母代码是什么,同时注意字节顺序。
【讨论】:
您可以使用& 255 获取低位(即与0b11111111 进行按位与):
>>> "{:08b}".format(300 & 255)
'00101100'
和高位通过添加按位移位:
>>> "{:08b}".format((300 >> 8) & 255)
'00000001'
有关按位运算符的更多信息,请参阅例如the Python wiki.
【讨论】:
我想你在找struct.pack:
>>> import struct
>>> i = 300
>>> struct.pack("H",i)
',\x01'
, 是它的 ascii 值 - 44。
【讨论】:
如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'
【讨论】:
mybin = bin(300)[2:].zfill(16)!鉴于您已经有一个整数,为什么还要麻烦转换为十六进制并返回呢?