python - 在 Python 3 中将二进制文件转换为字节数组

标签 python arrays python-3.x file hex

目前我正在尝试使用 pygatt将数据发送到 ble 特性,但它使用字节数组作为参数。 我的输入是一个二进制文件,例如:

$ 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 => ")

有人知道如何做到这一点吗? 谢谢大家

最佳答案

由于 OP 没有回答他们自己的帖子,并且该问题已在讨论中得到解决,因此我将在此处重述一下答案。

bytearray([0x03, 0x00, 0x11, 0x00, 0x00, 0x22, 0x01, 0x00, 0x00, 0x21, 0x8f, 0xf6, 0x82, 0xce, 0x8d, 0xad, 0x54])

bytearray(b'\x03\x00\x11\x00\x00"\x01\x00\x00!\x8f\xf6\x82\xce\x8d\xadT')

内部是一样的。字符串表示形式不同,使数组更短且更易于阅读,并且不会影响字节数组的实际内部结构。

任何接受第一个字节数组作为参数的函数/程序也应该接受第二个。这可以通过使用 == 运算符比较两者来轻松验证。

关于python - 在 Python 3 中将二进制文件转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48209760/

相关文章:

python - 当与线程一起使用时,cv2 imshow 在关闭并再次打开后不会再次打开窗口

python - 在 python 中使用 NLTK 删除停用词

python cv2数组到numpy

python - Pandas 根据连续重复创建新列

java - 在java中使用数组与方法,返回数组

android - 在android中显示二维按钮数组

python - 如何编写一个Python类型提示来指定一个带有某些参数或0个参数的Callable?

c - 如何使用缩减并行化这个 for 循环?

python-3.x - python3中的循环导入

python - 使用 python 3 从 googlemaps api 响应中提取数据