字节操作(串行数据)Raspberry Pi
Byte manipulation (Serial Data) Raspberry Pi
我正在尝试在 raspberry pi 和 arduino 之间建立一个 RS485 通信系统。我目前正在使用 Nick Gammons arduino 485 库 Arduino RS485 Library 并希望将其移植到 raspberry pi 上的 python 到 运行。
事物的传输端使用 crc8 和补码错误预防工作正常,但我在事物的接收端遇到困难。正如 pySerial API HERE ser.read() returns 中记录的字节类型的变量。这个问题是我需要按位操作来执行错误检查作为示例:
in_byte = ser.read()
if (in_byte >> 4) != ((in_byte & 0x0F) ^ 0x0F):
return 0
in_byte >>= 4
这当然会引发解释器错误,说明按位运算符“>>”与 int 和 bytes 类型的变量不兼容
我知道 int.from_bytes 方法,但这似乎需要多个字节加上字节序格式
我应该对逐字节串行数据执行按位运算的'correct'或典型方法是什么?
我对 python 比较陌生,有 C/C++ 背景,
谢谢
安迪
简答:
ord() 函数非常适合单字节,例如:
temp = ser.read()
in_byte = ord(temp)
TLDR:
Using Python struct.unpack with 1-byte variables
我正在尝试在 raspberry pi 和 arduino 之间建立一个 RS485 通信系统。我目前正在使用 Nick Gammons arduino 485 库 Arduino RS485 Library 并希望将其移植到 raspberry pi 上的 python 到 运行。
事物的传输端使用 crc8 和补码错误预防工作正常,但我在事物的接收端遇到困难。正如 pySerial API HERE ser.read() returns 中记录的字节类型的变量。这个问题是我需要按位操作来执行错误检查作为示例:
in_byte = ser.read()
if (in_byte >> 4) != ((in_byte & 0x0F) ^ 0x0F):
return 0
in_byte >>= 4
这当然会引发解释器错误,说明按位运算符“>>”与 int 和 bytes 类型的变量不兼容
我知道 int.from_bytes 方法,但这似乎需要多个字节加上字节序格式
我应该对逐字节串行数据执行按位运算的'correct'或典型方法是什么?
我对 python 比较陌生,有 C/C++ 背景,
谢谢
安迪
简答:
ord() 函数非常适合单字节,例如:
temp = ser.read()
in_byte = ord(temp)
TLDR:
Using Python struct.unpack with 1-byte variables