我有一个函数foo():取字节,连接它们并返回int值。但是当我传递foo时(' 99',' 00'),一个字节的前导0将被修剪。导致字符串'990'而不是' 9900'。
def foo(value1, value2):
return int(value1+value2, 16)
我想知道是否有一种优雅的方式告诉python我希望将参数视为字符串而不是整数。我能够做一个解决方法(如下所示),以确保每个参数有两个数字。只是想知道是否还有另一种方法可以解决这个问题
def foo(value1,value2):
if(len(str(value1)) != 2):
value1 = "0"+str(value1)
if(len(str(value2)) != 2):
value2 = "0"+str(value2)
return int(str(value1)+str(value2), 16)
编辑:foo(99,00),而非foo(' 99',' 00')正在给我提出我正在处理的问题
答案 0 :(得分:3)
"%02d" % n
将生成一个字符串,其中n
中的整数的十进制表示形式至少为2个字符w / 0。
答案 1 :(得分:0)
你似乎有正确的答案。您只需要先将输入转换为字符串。我相信您可能也希望将输入动态化,因此您可以将其更改为使用它。
def foo(*args):
return int(''.join(map(lambda x: str(x).zfill(2), args)), 16)
print foo('90', '01') # 36865
print foo('00', 'FF') # 255
print foo('01', '00') # 256
print foo('00', '01', '50') # 336
print foo('0', '1', '0') # 256 - same as foo('00', '01', '00')
或者如果你想接受任何长度的十六进制字符串
def foo(*args):
return int(''.join(map(lambda x: str(x).zfill((len(str(x)) + 1) / 2 * 2), args)), 16)
print foo('0001', '01') # 257
print foo('001', '1') # 257 - same as foo('0001', '01')
基本上,在将每个元素连接在一起之前,将每个元素的长度四舍五入到最接近的偶数个字符。
编辑 :这是关于输入整数的更新代码,第二个版本甚至允许大于255的数字。