目前我正在尝试使用pygatt将数据发送到BLE特征,但它使用一个bytearray作为参数。我的输入是一个二进制文件,例如:
$ xxd file.bin
00000000: 0300 1100 0022 0100 0021 8ff6 82ce 8dad ....."...!......
00000010: 54 T
我想要的是:
>>> bytearray([0x03, 0x00, 0x11, 0x00, 0x00, 0x22, 0x01, 0x00, 0x00, 0x21, 0x8f, 0xf6, 0x82, 0xce, 0x8d, 0xad, 0x54])
也许我的低层次方法理解有误,但这是我所做的事情:
import binascii
import hexdump
my_file = "file.bin"
with open(my_file, 'rb') as file_t:
# read the file as xxd do
blob_data = hexdump.hexdump(file_t, result='return')
print(blob_data)
with open(my_file, 'rb') as file_t:
blob_data = binascii.hexlify(file_t.read())
print(blob_data)
with open(my_file, 'rb') as file_t:
blob_data = bytearray(file_t.read())
print(blob_data)
输出结果为:
00000000: 03 00 11 00 00 22 01 00 00 21 8F F6 82 CE 8D AD ....."...!......
00000010: 54 T
b'030011000022010000218ff682ce8dad54'
bytearray(b'\x03\x00\x11\x00\x00"\x01\x00\x00!\x8f\xf6\x82\xce\x8d\xadT')
但是从这一点开始,我对如何将其转换为字节数组感到困惑,最后一个实现离目标不远,但某些字符被转换为它们的ASCII等效项(例如\x22 =>“)
有人知道如何做吗? 谢谢大家
bytearray([0x03,0x00,0x11,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x8f,0xf6,0x82,0xce,0x8d,0xad,0x54])
来输出它,您将获得完全相同的字符串表示形式。如果您将bytearray([0x03,0x00,0x11,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x8f,0xf6,0x82,0xce,0x8d,0xad,0x54])
与您的blob_data
进行比较,则结果将为True
。 - Alex Bauskb'\x22'
和b'"'
代表相同的值。 - Stop harming Monica`expected = bytearray([0x03, 0x00, 0x11, 0x00, 0x00, 0x22, 0x01, 0x00, 0x00, 0x21, 0x8f, 0xf6, 0x82, 0xce, 0x8d, 0xad, 0x54]) with open(my_file, 'rb') as file_t: blob_data = bytearray(file_t.read()) print(blob_data) print(blob_data == expected)`
数据是相同的,所以问题可能来自于pygatt的实现(它基本上是一个命令行工具gatttool的包装器)。 - snakeman