Raspberry Pi - 如何打印十六进制值?

时间:2016-08-15 05:06:47

标签: python windows hex putty raspberry-pi3

我在Raspberry Pi中使用Python,我的数据包是十六进制值,如"0x750x010x010x060x000x08"。我想在UART和Raspberry Pi之间进行串行通信,所以我在Raspberry Pi中使用Python编写了一个程序,我在终端上检查数据,但是当我在终端中选择ASCII选项时,它显示在输出下面:

75
01
01
06
00
08

当我在终端中选择了十六进制选项时,它没有显示上面的输出。现在,当我选择hex选项但不选择ASCII选项时,我想要上面的输出。那怎么样呢?如果我需要将其转换为十六进制或字节或除了告诉我Python中的代码之外的任何其他内容。

3 个答案:

答案 0 :(得分:0)

import serial

port=serial.Serial("/dev/ttyAMA0",baudrate=115200,timeout=3.0)

while True:
    a="0x750x010x010x060x000x08"
    b=a.replace("0x"," ")
    #print b 
    alist = b.split(" ")
    for element in alist
        port.write("\r\n"+str(element))

这会提供您想要的所需格式数据

答案 1 :(得分:0)

首先,您的for循环和if声明在此处使用错误,并且不需要它们。 while循环可以等效地重写为:

a = "0x750x010x010x060x000x08"
b = a.replace("0x", " ")
while True:
      port.write("\r\n"+b)

您的主要误解是您认为Python理解您想要迭代十六进制数字。但事实并非如此。在原始循环中,它只是逐个字母地迭代a字符串。事实上,在for循环的每次迭代中,您只需将原始a字符串更改为“75 01 01 06 00 08”并将其作为字符串发送。

如果需要发送字节,则应将字符串拆分为每个字节信息的单独记录,并将这些记录转换为字节。 这是

的代码
a = "0x750x010x010x060x000x08"
b1 = a.split("0x") 
# b1 is ["", "75", "01", "01", "06", "00", "08"], the values are still strings
b2 = [int(x, 16) for x in b1[1:]] 
# b2 is a list of integers, the values calculated from strings assuming they are hex (16-bit) numbers
# use b1[1:] to cut the first blank string
b = str(bytearray(b2))
#b joins values list into a bytes string (each interger transformed into one byte)
while True:
      port.write("\r\n" + b)

评论中的问题更新: 如果a格式为“0x750101060008”,则只需将其拆分为2个字母:

b1 = [a[2*i:2*i+2] for i in range(len(a)/2)]

答案 2 :(得分:0)

    import serial

port=serial.Serial("/dev/ttyAMA0",baudrate=115200,timeout=3.0)

while True:
    a="0x750x010x010x060x000x08"
    b=a.replace("0x"," ")
    #print b 
    alist = b.split(" ")
    for element in alist
        port.write("\r\n"+str(element))

这个