我想使用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很新,请帮助。
答案 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个选项:
编写您自己的函数,将数字转换为您想要的格式的十六进制数,并使用它代替hex
:
def myhex(num):
return '0x%02x' % num
这个0x%02x
表示 - 首先,0x
只是普通文本,您可能希望在所有十六进制数字前加上%02x
表示:打印参数为长度为2的十六进制数,前缀0
,如果它太短(一位十六进制数字)。
在读取值时不要将数字转换为十六进制(使用数字表示为数字可能是一件好事)并在最后将它们打印到您的规范中:
print '(' + ', '.join('%0x02x' % x for x in tuple) + ')'
创建tuple
中的所有值的列表(顺便说一句,尽可能避免使用关键字作为变量名称)转换为带有0x
前缀的正确2位十六进制数字,使用', '
加入它们并用括号括起来。但随意改变它 - 我只是建立你的例子并试图复制你的输出。