如何在Python中将整数的两个字节转换回整数?

如何在Python中将整数的两个字节转换回整数?,python,serial-port,byte,arduino,Python,Serial Port,Byte,Arduino,我目前正在使用一个Arduino,它通过串行(使用pySerial)将一些整数(int)输出到一个Python脚本,我正在为Arduino编写该脚本,以便与飞行模拟程序X-Plane通信 我设法将原始数据分成两个字节,以便将其发送到脚本,但重建原始整数时遇到了一点困难 我尝试使用基本的位运算符(等等),就像我在类似C++的程序中所做的那样,但它似乎不起作用 我怀疑这与数据类型有关。我可能在相同的操作中使用带字节的整数,但我不能真正说出每个变量的类型,因为据我所知,在Python中并没有真正声明变

我目前正在使用一个
Arduino
,它通过串行(使用
pySerial
)将一些整数(int)输出到一个Python脚本,我正在为
Arduino
编写该脚本,以便与飞行模拟程序
X-Plane
通信

我设法将原始数据分成两个字节,以便将其发送到脚本,但重建原始整数时遇到了一点困难

我尝试使用基本的位运算符(等等),就像我在类似C++的程序中所做的那样,但它似乎不起作用

我怀疑这与数据类型有关。我可能在相同的操作中使用带字节的整数,但我不能真正说出每个变量的类型,因为据我所知,在Python中并没有真正声明变量(我对Python非常陌生)

self.pot=self.myline[2]这完全有效:

long = 500
first = long & 0xff  #244
second = long >> 8  #1
result = (second << 8) + first #500
long=500
第一个=长&0xff#244
秒=长>>8#1

结果=(第二个要将字节或字符转换为它所表示的数字,请使用
ord()
。下面是从int到bytes再返回的简单循环:

>>> number = 3**9
>>> hibyte = chr(number / 256)
>>> lobyte = chr(number % 256)
>>> hibyte, lobyte
('L', '\xe3')
>>> print number == (ord(hibyte) << 8) + ord(lobyte)
True
编号=3**9 >>>hibyte=chr(数字/256) >>>lobyte=chr(编号%256) >>>hibyte,lobyte ('L','\xe3')
>>>print number==(ord(hibyte)假设存储在
myline
中的数据首先具有高字节,那么您所拥有的基本上应该是有效的:

myline = [0, 1, 2, 3]
pot = myline[2]<<8 | myline[3]

print 'pot: {:d}, 0x{:04x}'.format(pot, pot)  # outputs "pot: 515, 0x0203"
myline=[0,1,2,3]

pot=myline[2]您可以使用
struct
模块在整数和字节表示之间进行转换。在您的情况下,要将Python整数转换为两个字节,然后再转换回来,您可以使用:

>>> import struct
>>> struct.pack('>H', 12345)
'09'
>>> struct.unpack('>H', '09')
(12345,)

struct.pack
struct.unpack
的第一个参数表示您希望如何格式化数据。在这里,我使用
前缀要求它处于大结尾模式(您可以使用
例如,使用大结尾编码:

int.from_字节(my_字节,byteorder='big')

你看过了吗?如果你能提供一个例子,那会很有帮助。不过最有可能的是
struct
模块会帮你处理它。它首先是高字节。不过,这是一个不起作用的特例。我正在使用一个函数,它将数字输出到X平面终端,该终端需要int、float或double(任何都可以)。但是,当我将self.pot作为参数传递(我希望这是正确的术语)时,它不会显示任何内容,而会输出任何其他数字。您将数据以何种格式(ASCII)发送到终端?如果是,在发送数据之前,如何将
pot
中的值(整数)转换为该格式?
myline = [0, 1, 2, 3]
pot = myline[3]<<8 | myline[2]

print 'pot: {:d}, 0x{:04x}'.format(pot, pot)  # outputs "pot: 770, 0x0302"
>>> import struct
>>> struct.pack('>H', 12345)
'09'
>>> struct.unpack('>H', '09')
(12345,)