python消除函数中的前导零

时间:2018-04-11 15:08:50

标签: python python-3.x python-2.7

我有一个函数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')正在给我提出我正在处理的问题

2 个答案:

答案 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的数字。