Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用两个字节表示一个数字_Python_Python 2.7 - Fatal编程技术网

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) &

在Python中,使用两个字节表示从
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'