我想将十六进制数字(例如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
答案 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