python从串口接收到数据后解析
python从串口接收数据,数据长度固定
数据示例如下02 24 30 20 30 30 31 31 32 39 30 30 30 30 31 30 0D
接收到的是16进制ascii码
请问如何将粗体部分的数据解析成一个数。(接收到数据的第11位到第16位)
30 30 30 30 31 30
分别对应0-0-0-0-1-0,分别对应十万,万,千,百,十,个
解析到的就是10
目前代码如下
用chr转换data[10],直接转换失败。求解
import serial
from time import sleep
def recv(serial):
while True:
data = serial.read_all().decode() # str
if data == '':
continue
else:
break
sleep(2.1)
return data
if __name__ == '__main__':
serial = serial.Serial('COM19', 9600, timeout=10)
if serial.isOpen():
print("serial open success")
else:
print("serial open failed")
while True:
data = recv(serial)
print(data) # str
将16进制的ascii转换成10进制数字可以使用python的内置函数 int(x, 16) x为16进制的ascii字符,16表示16进制,返回10进制数字。示例: int('30',16) 返回48 所以上面的可以写成如下代码: data="02 24 30 20 30 30 31 31 32 39 30 30 30 30 31 30 0D" first_num = data[10:12] # "30" second_num = data[12:14] # "30" third_num = data[14:16] # "30" fourth_num = data[16:18] # "30" fifth_num = data[18:20] # "31" sixth_num = data[20:22] # "30" num=int(first_num, 16)*100000+int(second_num, 16)*10000+int(third_num, 16)*1000+ int(fourth_num, 16)*100+int(fifth_num, 16)*10+int(sixth_num, 16) num=int(num) print(num) # 10万
可以使用Python中的字符串切片来获取需要解析的数据。先将接收到的数据转换成字符串类型,然后使用切片操作获取需要的数据,并将其转换为十进制整数类型。
以下是一个可能的解决方案:
import serial
from time import sleep
def recv(serial):
while True:
data = serial.read_all().decode() # str
if data == '':
continue
else:
break
sleep(2.1)
return data
if __name__ == '__main__':
serial = serial.Serial('COM19', 9600, timeout=10)
if serial.isOpen():
print("serial open success")
else:
print("serial open failed")
while True:
data = recv(serial)
print(data) # str
# 解析数据
hex_str = data[10:16] # 获取需要解析的数据部分,即16进制的'303030303130'
dec_num = int(hex_str, 16) # 将16进制字符串转换为10进制整数
print('解析出的数值为:', dec_num)
这个代码片段使用切片操作从接收到的数据中获取了需要解析的16进制数值,然后将其转换为10进制整数类型。你可以根据自己的需求调整和优化这个代码。