【问题标题】:Convert string into hex to send for serial communication将字符串转换为十六进制以发送以进行串行通信
【发布时间】:2016-03-01 06:22:30
【问题描述】:

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

我尝试了以下 sn-ps 但没有成功:

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

输出显示十六进制转换,但我无法在串行端口上发送它,因为长度不同。有人能解决这个问题吗?

【问题讨论】:

    标签: python string hex


    【解决方案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
    

    【讨论】:

    • 感谢您的回复。但它只是将数字转换为十六进制,我还必须在串行端口上发送它。对于您的解决方案,它给了我 len(word_hex(int(i))) = 8 在端口上发送 8 个字符。对于特定数字,我只需要 2 个字节(字符)。
    • 好的。我在脚本中进行了一些调整后得到了它。要获得所需的输出,只需将"\\x" 保留为空白即可删除,还必须编辑行。 print (word_hex(int(i))).encode("hex").
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 2013-02-07
      • 2018-01-31
      • 1970-01-01
      相关资源
      最近更新 更多