使用两个字节表示数字

时间:2015-02-03 09:15:56

标签: python python-2.7

Python使用两个字节表示从065535的数字的最简单方法是什么?

例如,十进制中的300为二进制0000000100101100,十六进制为012C

当我得到300时,我想要的输出是两个字节:

  • 首先是00101100(二进制表示)
  • second是00000001(二进制表示)

最简单的方法是什么?

4 个答案:

答案 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'