将字符串转换为十六进制以发送串行通信

时间:2016-03-01 06:22:30

标签: python string hex

我有一个数字5:240的字符串。从那里我必须通过十六进制表示从字符串发送数字。该数字必须在两个字节的范围内。但是,我想在我的串口发送精确的表示,如'\x00\x05\x00\xf0'。有人可以帮我解决这个问题吗?

我尝试过以下代码段,但没有成功:

b='5:240'
b = b.split(':')
for i in range(len(b)):
    print hex(int(b[i]))
    print len(hex(int(b[i])))

结果:

0x5
3
0xf0
4

输出显示十六进制转换,但我不可能在串口上发送它,因为长度是变化的。任何人都可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您可以使用hexadecimal format specifier, x

def word_hex(w):
    a = int(w / 256)
    b = w % 256
    return "{0:#0{1}x}{2:#0{3}x}".format(a,4,b,4).replace("0x", "\\x")

b='5:240'
b = b.split(':')
for i in b:
    print(word_hex(int(i)))

打印

\x00\x05
\x00\xf0

答案 1 :(得分:1)

答案:参考塞尔丘克的回答。我得到了以下解决方案。

def word_hex(w):
    a = int(w / 256)
    b = w % 256
    return "{0:#0{1}x}{2:#0{3}x}".format(a,4,b,4).replace("0x", "")

b='5:240'
b = b.split(':')
for i in b:
    print(word_hex(int(i)).decode("hex"))