【发布时间】:2018-08-17 12:19:44
【问题描述】:
读取序列
使用 PySerial 创建了以下程序:
import serial
class comunicacao():
def __init__(self, porta, baud):
s = serial.Serial(porta, baud)
data = s.read(18)
data = data
print("Data: ", (data))
comunicacao('COM7', 57600)
它正在接收十进制数字10000进行测试,打印输出为:Data: b'\x020000000000002710\x03'
因为 HEX 中的 2710 是 DEC 中的 10000。
转化
所以尝试通过以下方式进行转换:
-
print("Data: ", int(data, 16))给出错误:
print("数据:", int(data, 16))
ValueError: int() 基数为 16 的无效文字:b'\x020000000000002710\x03'
- 使用
data = s.read(18).decode(),打印输出为Data: 0000000000002710,尝试使用int()进行转换会出现错误:
print("数据:", int(data, 16))
ValueError: int() 基数为 16 的无效文字:'\x020000000000002710\x03'
-
data = data.lstrip("0")和data = s.read(18).decode()没有去除前导零。 - 而
data = data.lstrip("0")和data = s.read(18)给出了错误:
print("数据:", (data.lstrip("0")))
TypeError:类似字节的对象是 必需,而不是“str”
问题
如何将这种数据类型(我认为是ASCII,但是是HEX数字)转换为DEC?
【问题讨论】:
-
int(data[1:-1], 16)之类的内容是否足以满足您的需求? -
就像一个魅力!你能解释一下吗?有了答案,我就可以接受了。
-
我想正确的方法是
\x02可能表明下一个 N 字节块是 int 的十六进制表示(在这种情况下为 16 个字符),以使其更多健壮...它被称为切片 - 值得一试:stackoverflow.com/questions/509211/… -
您可能还想查看内置的
struct模块 - 它可能/可能不会对您在这里所做的有用... -
是的,如果你可以从另一端发送数据的二进制表示,我也推荐结构或数组模块。更强大和更好的协议来处理。
标签: python python-3.x pyserial