使用Python的十六进制代码

时间:2014-04-10 11:25:06

标签: python python-2.7 hex

我想使用python从用户检索十六进制数据。如何从用户检索数据并将其转换为十六进制。

 #to read varibales  from Python

STX        =  '\xF7' #hex(input("enter STX Value"))
Deviceid   =   hex(input("enter device id"))
subid      =   hex(input("enter address of the Device and load details"))
Comnd      =   hex(41)
Data       =   hex(01)
EorCode    =   input("enter EOR Code")
ADD_sum    =   '\xF2' #hex(input("Enter Add sum value"))

tuple  = (STX, Deviceid,subid,Comnd,Data,EorCode,ADD_sum)
print tuple

我正在从用户那里阅读上述数据,但我得到的输出如下

enter device id03
enter address of the Device and load details81
enter EOR Code32
('\xf7', '0x3', '0x51', '0x29', '0x1', '0x20', '\xf2')

但我需要打印为0x03和0x01。

我对PYTHON很新,请帮助。

2 个答案:

答案 0 :(得分:2)

您正在寻找字符串格式:

>>> "0x{0:04x}".format(42)
'0x002a'

所以你要修改你的行:

Deviceid   =   "0x{0:2x}".format((input("enter device id"))

此外,如果任何其他Python开发人员正在查看此代码,您可能需要查看Python样式指南PEP8

按照样式指南,您的代码可能如下所示:

stx = '\xF7'  # hex(input("enter STX Value"))
device_id = hex(input("enter device id"))  # deviceid might also be fine
sub_id = hex(input("enter address of the Device and load details"))
comnd = hex(41)
data = hex(01)
eor_code = input("enter EOR Code")
add_sum = '\xF2'  # hex(input("Enter Add sum value"))

values  = (stx, device_id, sub_id, comnd, data, eor_code, add_sum)
print values  # tuple is a keyword - it's best to *not* override them if possible

当然,

  

风格指南是关于一致性的。与此风格指南的一致性非常重要。项目的一致性更为重要。一个模块或功能的一致性是最重要的。

     

但最重要的是:知道何时不一致 - 有时风格指南不适用。如有疑问,请使用您的最佳判断。查看其他示例并确定最佳效果。并且毫不犹豫地问!

答案 1 :(得分:1)

在我看来,您真正需要的是指定如何打印数字,但hex函数返回一个字符串。 因为在python中,'10'字符串,这与10不同,后者是 int 。 Python是动态的,但是强烈类型的语言。

因此,为了获得您想要的输出,您可以选择2个选项:

  1. 编写您自己的函数,将数字转换为您想要的格式的十六进制数,并使用它代替hex

    def myhex(num):
        return '0x%02x' % num
    

    这个0x%02x表示 - 首先,0x只是普通文本,您可能希望在所有十六进制数字前加上%02x表示:打印参数为长度为2的十六进制数,前缀0,如果它太短(一位十六进制数字)。

  2. 在读取值时不要将数字转换为十六进制(使用数字表示为数字可能是一件好事)并在最后将它们打印到您的规范中:

    print '(' + ', '.join('%0x02x' % x for x in tuple) + ')'
    

    创建tuple中的所有值的列表(顺便说一句,尽可能避免使用关键字作为变量名称)转换为带有0x前缀的正确2位十六进制数字,使用', '加入它们并用括号括起来。但随意改变它 - 我只是建立你的例子并试图复制你的输出。