c# - C# 中的十六进制字符串表示法转换为 Python
问题描述
我正在编写代码以通过蓝牙从生理监视器中检索数据到 Python 中的串行端口。我需要向监视器发送一个十六进制代码才能接收数据。我已成功连接到端口,但无法发送十六进制代码。十六进制字符串是给我的,但它来自 C#,我不知道是否需要转换它以便 Python 可以读取它。当我执行下面的代码时,我的错误消息指出:
TypeError: fromhex() takes exactly one argument (61 given)
这是 C 表示法中的字符串
{0x7E,0x00,0x3A,0x00,0x00,0x00,0x00,0x80,0xDE,0xFB,0x2C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,#0x00,0x09,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x05,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE2,0x7E}
下面是我在 Python3 中的程序
import serial
ser = serial.Serial(
port='/dev/cu.PARANISERIAL-GenericSer',
baudrate=9600,
timeout= 10,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS
)
message_bytes = bytes.fromhex(0x7E0x00/0x3A/0x00/0x00/0x00/0x00/0x80/0xDE/0xFB/0x2C/0x00/0x00/0x00/0x00/0x00/0x00/0x00/0x00/0x00/0x09/0x00/0x00/0x00/0x00/0xFF/0x00/0x00/0x00/0x00/0x00/0x00/0x00/0x00/0x00/0x00/0x00/0x00/0x00/0x00/0x00/0x01/0x05/0x00/0x0C/0x00/0x00/0x00/0x00/0x00/0x04/0x05/0x00/0x00/0x00/0x00/0x00/0x00/0x00/0xE2/0x7E)
ser.write(message_bytes)
print (ser.is_open) # True for opened
if ser.is_open:
while True:
data = ser.read(10)
print(data)
print(str(data.decode()))
else:
print('no data')
time.sleep(1)
else:
print('z1serial not open')
s = ser.read(100)
print(str(s.decode()))
ser.close()
print(ser.isOpen())
任何指导将不胜感激。谢谢
解决方案
bytes.fromhex
如果删除了所有非十六进制字符,将转换字符串:
>> h = '0x7E,0x00,0x3A,0x00,0x00,0x00,0x00,0x80,0xDE,0xFB,0x2C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,#0x00,0x09,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x05,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x04,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE2,0x7E'
>>> bytes.fromhex(h.replace('0x', '').replace(',', '').replace('#', ''))
b'~\x00:\x00\x00\x00\x00\x80\xde\xfb,\x00\x00\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x05\x00\x0c\x00\x00\x00\x00\x00\x04\x05\x00\x00\x00\x00\x00\x00\x00\xe2~'
推荐阅读
- javascript - 如何在javascript中为给定的一组值获得正确的输出?
- yaml - Openapi 3.0:如果模式具有单一属性,“allOf”是否需要模式的属性?
- android - 为什么我不能从同一个对象两次绑定到我的前台服务?
- c# - System.runtime.interopservices.runtimeinformation
- google-apps-script - 如何允许 Google AppScript 中的 Cors 标头发出 XMLHttpRequest?
- highcharts - 使用 x 轴滚动条滚动工具提示显示在其他地方 gnatt highcharts
- git - 如何从最后一个匹配的提交消息中获取合并到分支中的所有 git 分支
- kubernetes - 在不替换整个集群的情况下更新数字海洋 kubernetes 集群的节点大小
- vue.js - 如何在构建时安装 vue 库的内部组件?
- excel - 如何根据VBA中数组的索引选择表中的列?