从文件中读取十六进制数据并将其传递给将数据作为字符串的写入函数

时间:2017-03-15 09:39:08

标签: python

我想将十六进制数字(例如0xff)传递给一个写入函数,该函数将数据作为字符串输入,例如h.write(' \ xFF')。 但是当我从变量传递十六进制数字并尝试在写入函数中使用该数据时,我无法做到这一点。下面是我尝试过的代码。

a = 'ff'
h.write('\x%s'%(a))
I also tried
a = 0xff
h.write('\x%x'%(a))
I also tried
a = 0xff
a = str(a)
a = '\\'+'x'+'%s'%(a)
h.write('a')

我实际上使用FTDI ft2232h usb并行8位转换器。 因为我没有在示波器屏幕上看到输出,所以没有错误消息。只有当我对其进行硬编码时,它才有效,例如h.write('\xFF')

Python版本= 3.6
Os Win7 64bit

谢谢你, Sleeba

1 个答案:

答案 0 :(得分:0)

如果您正在从文件中读取十六进制字符串并且想要将它们转换为字节,那么简单的方法就是使用binascii.unhexlify。这是一个简短的演示。

from binascii import unhexlify

src = 'ffaa5500'
out = unhexlify(src)
print(out)

<强>输出

b'\xff\xaaU\x00'

如果将out写入以二进制模式打开的文件(或类文件对象),则该文件将接收字节\xff\xaa\x55\x00

但是,如果要生成要转换为字节的数值数据,则执行此操作的简便方法是使用bytearray对象。这是一个合成单个正弦波周期的例子。

from math import radians, sin

# Make a single cycle of a sin wave
data = bytearray()
for i in range(360):
    y = sin(radians(i))
    v = int(0.5 + 127 * (1 + y))
    data.append(v)

with open('scope.bin', 'wb') as f:
    f.write(data)

这是'scope.bin'内容的hexdump:

00000000  7f 81 83 86 88 8a 8c 8e  91 93 95 97 99 9c 9e a0  |................|
00000010  a2 a4 a6 a8 aa ad af b1  b3 b5 b7 b9 bb bd bf c0  |................|
00000020  c2 c4 c6 c8 ca cb cd cf  d1 d2 d4 d6 d7 d9 da dc  |................|
00000030  dd df e0 e2 e3 e4 e6 e7  e8 ea eb ec ed ee ef f0  |................|
00000040  f1 f2 f3 f4 f5 f6 f6 f7  f8 f8 f9 fa fa fb fb fc  |................|
00000050  fc fc fd fd fd fe fe fe  fe fe fe fe fe fe fe fe  |................|
00000060  fd fd fd fc fc fc fb fb  fa fa f9 f8 f8 f7 f6 f6  |................|
00000070  f5 f4 f3 f2 f1 f0 ef ee  ed ec eb ea e8 e7 e6 e4  |................|
00000080  e3 e2 e0 df dd dc da d9  d7 d6 d4 d2 d1 cf cd cb  |................|
00000090  ca c8 c6 c4 c2 c0 bf bd  bb b9 b7 b5 b3 b1 af ad  |................|
000000a0  aa a8 a6 a4 a2 a0 9e 9c  99 97 95 93 91 8e 8c 8a  |................|
000000b0  88 86 83 81 7f 7d 7b 78  76 74 72 70 6d 6b 69 67  |.....}{xvtrpmkig|
000000c0  65 62 60 5e 5c 5a 58 56  54 51 4f 4d 4b 49 47 45  |eb`^\ZXVTQOMKIGE|
000000d0  43 41 3f 3e 3c 3a 38 36  34 33 31 2f 2d 2c 2a 28  |CA?><:86431/-,*(|
000000e0  27 25 24 22 21 1f 1e 1c  1b 1a 18 17 16 14 13 12  |'%$"!...........|
000000f0  11 10 0f 0e 0d 0c 0b 0a  09 08 08 07 06 06 05 04  |................|
00000100  04 03 03 02 02 02 01 01  01 00 00 00 00 00 00 00  |................|
00000110  00 00 00 00 01 01 01 02  02 02 03 03 04 04 05 06  |................|
00000120  06 07 08 08 09 0a 0b 0c  0d 0e 0f 10 11 12 13 14  |................|
00000130  16 17 18 1a 1b 1c 1e 1f  21 22 24 25 27 28 2a 2c  |........!"$%'(*,|
00000140  2d 2f 31 33 34 36 38 3a  3c 3e 3f 41 43 45 47 49  |-/13468:<>?ACEGI|
00000150  4b 4d 4f 51 54 56 58 5a  5c 5e 60 62 65 67 69 6b  |KMOQTVXZ\^`begik|
00000160  6d 70 72 74 76 78 7b 7d                           |mprtvx{}|
00000168