英文:
Format bytes as hex string
问题
我有一个RFID读卡器。物理接口与RS-232规范兼容。
1个起始位、8个数据位、1个停止位、无奇偶校验。以下是我用于运行读卡器并读取UHF RFID标签的代码:
```python
import serial
ser = serial.Serial(port='COM8', baudrate=115200, timeout=0.01)
ba_antenna_set_1 = b'\xA0\x04\x01\x74\x00\xE7'
ba_antenna_set_2 = b'\xA0\x04\x01\x74\x10\xD7'
ba_inventory = b'\xA0\x04\x01\x89\x01\xD1'
ser.write(ba_antenna_set_1);
ser.write(ba_antenna_set_2);
while True:
ser.write(ba_inventory);
if ser.in_waiting > 0:
data = ser.readline()
print(data)
运行此代码时,我得到以下输出:
b'\xa0\x04\x01t\x10\xd7'
b'\xa0\x13\x01\x89t0\x000\x083\xb2\xdd\xd9\x01@\x00\x00\x00\x00M\xbe'
b'\xa0\n'
b'\x01\x89\x00\x00\x10\x00\x00\x00\x01\xbb'
b'\xa0\x13\x01\x89\x040\x000\x083\xb2\xdd\xd9\x01@\x00\x00\x00\x00N-'
我希望我的输出如下所示,并且需要帮助:
'A0 04 01 74 00 E7'
'A0 04 01 74 10 D7'
'A0 04 01 89 01 D1'
'A0 13 01 89 24 30 00 30 08 33 B2 DD D9 01 40 00 00 00 00 50 0B'
'A0 0A 01 89 00 00 11 00 00 00 01 BA'
<details>
<summary>英文:</summary>
I have a RFID reader. The physical interface is compatible with the RS – 232 specifications.
1start bit、8 data bits、1 stop bit、no even odd check.. Here is the code i use to run the reader and read the UHF RFID tags
import serial
ser = serial.Serial(port='COM8', baudrate=115200, timeout=0.01)
ba_antenna_set_1 = b'\xA0\x04\x01\x74\x00\xE7'
ba_antenna_set_2 = b'\xA0\x04\x01\x74\x10\xD7'
ba_inventory = b'\xA0\x04\x01\x89\x01\xD1'
ser.write(ba_antenna_set_1);
ser.write(ba_antenna_set_2);
while True:
ser.write(ba_inventory);
if ser.in_waiting > 0:
data = ser.readline()
print(data)
When I run this code, I get an output like this:
b'\xa0\x04\x01t\x10\xd7'
b'\xa0\x13\x01\x89t0\x000\x083\xb2\xdd\xd9\x01@\x00\x00\x00\x00M\xbe'
b'\xa0\n'
b'\x01\x89\x00\x00\x10\x00\x00\x00\x01\xbb'
b'\xa0\x13\x01\x89\x040\x000\x083\xb2\xdd\xd9\x01@\x00\x00\x00\x00N-'
I want my output to be as below and I need help with this
'A0 04 01 74 00 E7'
'A0 04 01 74 10 D7'
'A0 04 01 89 01 D1'
'A0 13 01 89 24 30 00 30 08 33 B2 DD D9 01 40 00 00 00 00 50 0B'
'A0 0A 01 89 00 00 11 00 00 00 01 BA'
</details>
# 答案1
**得分**: 1
`data=ser.readline()` 返回一个 `bytes` 数组,所以你想将其转换为十六进制字符串。有一个内置的方法可以做到这一点,即 `.hex()`,它默认返回一个没有空格的十六进制字符串,但你可以指定一个空格,还可以使用 `.upper()` 将 a-f 字符转换为大写。
```python
datastring = data.hex(' ').upper()
print(datastring)
英文:
data=ser.readline()
returns a bytes
array, so you want that converted to a hex string. There is a built in method for that, .hex()
, which returns a hex string with no spaces by default, but you can specify a space, and you can use .upper()
to convert the a-f characters to upper case.
datastring = data.hex(' ').upper()
print(datastring)
答案2
得分: -1
data = ser.readline().decode('utf-8')
英文:
try this:
data = ser.readline().decode('utf-8')
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论