我有一个名为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
任何帮助都表示赞赏。
答案 0 :(得分:0)
我认为让你的函数不加区分地接受
int in base 10
和int 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