Gep*_*ado 3 python byte serial-port arduino
我目前正在使用一个Arduino
整数(int)通过串行(使用pySerial
)输出到我正在编写的Python脚本,Arduino
以便与X-Plane
飞行模拟程序进行通信.
我设法将原始文件分成两个字节,以便我可以将它发送到脚本,但是我在重建原始整数时遇到了一些麻烦.
我尝试使用基本的按位运算符(<<,>>等),就像我在类似C++的程序中所做的那样,但它似乎没有用.
我怀疑它与数据类型有关.我可能在相同的操作中使用带有字节的整数,但我无法确定每个变量的类型,因为你并不真正在Python中声明变量,据我所知(我对Python很新) .
self.pot=self.myline[2]<<8
self.pot|=self.myline[3]
Run Code Online (Sandbox Code Playgroud)
您可以使用该struct
模块将整数和表示形式转换为字节.在您的情况下,要从Python整数转换为两个字节并返回,您将使用:
>>> import struct
>>> struct.pack('>H', 12345)
'09'
>>> struct.unpack('>H', '09')
(12345,)
Run Code Online (Sandbox Code Playgroud)
第一个参数struct.pack
和struct.unpack
表示您希望如何格式化数据.在这里,我通过使用>
前缀(你可以使用<
little-endian,或者=
本机)来要求它处于大结局模式,然后我说有一个由...表示的单个无符号短(16位整数)H
.
其他可能性是b
有符号字节,B
无符号字节,h
有符号短(16位),i
有符号32位整数,I
无符号32位整数.您可以通过查看struct
模块的文档来获取完整列表.
这完全有效:
long = 500
first = long & 0xff #244
second = long >> 8 #1
result = (second << 8) + first #500
Run Code Online (Sandbox Code Playgroud)
如果您不确定“myline”中的类型,请检查 Stack Overflow 问题如何确定 Python 中的变量类型?。