将十六进制的文本表示形式转换为十六进制字节

时间:2015-08-07 16:09:47

标签: python python-2.7

我需要将十六进制值的字符串表示转换为字节值。我是Python的新手,我遇到了麻烦,因为我使用的其他语言没有强大的数据类型。我有一个Python表单(使用Glade创建),用户输入十六进制值以写入芯片的寄存器。

用户在文本字段中输入0x1D,我需要通过Adafruit 232H USB / SPI加密狗写出来。显然0x1D是一个字符串。 Adafruit spi.write()抛出一个错误:ValueError:string必须大小为1

我尝试使用

将String值转换为int
intVal = int(label.get_text(), 0)

返回输入的十六进制字符串的正确整数值。 使用hex(intVal)将其转换回十六进制值确实会返回正确的十六进制值,但它又是一个字符串。我相信我需要这个作为字节值。

spi.write([0x1D, 0x12]) 

工作,如果我在python代码本身设置这些值,所以在这种情况下它们显然不是字符串,但如果我将这些相同的值放入表单中,并将它们拉出来,当然它不会。

l = builder.get_object("label1")
v = builder.get_object("entry1")
hex1= int(l.get_text(), 0)
hexReg= hex(hex1)
hex2= int(v.get_text(), 0)
hexVal = hex(hex2)
spi.write([hexReg, hexVal])

我把所有这些分成几行,显式调用,试图调试问题。

那么如何将这些十六进制字符串转换为原始十六进制值,只需将0x1D放入代码本身即可?

1 个答案:

答案 0 :(得分:0)

当您声明spi.write([0x1D, 0x12])按预期工作时 - 只需忽略对hex的调用并使用spi.write([hex1, hex2])

0x1D == 29基本上实际字节看起来像00011101

相关问题