Python - 将函数参数输入转换为十六进制

时间:2017-11-03 23:49:59

标签: python string hex decimal

我有一个名为read_memory的python函数,它有一个名为addr的参数。我想实现一种将addr转换为HEX值的方法。听起来很简单,但用户可以在参数中输入字符串/ int:

read_memory(0x106940)
read_memory('0x106940')
read_memory(106940)    #this is an int
read_memory('106940')

结果应该都是0x106940。我有以下代码,但它没有按预期工作:

def read_memory(addr):
    hex_addr = str(addr)
    if('0x' not in hex_addr):
        hex_addr = '0x' + hex_addr
    return hex_addr

结果是:

read_memory(0x106940) -> 0x1075520
read_memory('0x106940') -> 0x106940
read_memory(106940) -> 0x106940
read_memory('106940') -> 0x106940

任何帮助都表示赞赏。

1 个答案:

答案 0 :(得分:0)

  

我认为让你的函数不加区分地接受int in base 10int in base 16是不是一个好主意;这会伤害你   在路上。以下处理提案按原样处理输入,   而不是“应该如此”。

您可以使用try except block来控制流程:

def read_memory(addr):
    try:
        return hex(addr)
    except TypeError:
        str_addr = str(addr)
        if('0x' != str_addr[:2]):
            hex_addr = '0x' + str_addr
        else:
            hex_addr = str_addr
        return hex_addr

print(read_memory(0x106940))     # a hex  (int base 16)
print(read_memory('0x106940'))   # a string representing a hex
print(read_memory(106940))       # an integer  (int base 10)
print(read_memory('106940'))     # a string representing a hex

结果如下:

0x106940
0x106940
0x1a1bc        # <-- this is the hex value of integer 106940 
0x106940