我需要添加2个字符串,这些字符串是mac格式的十六进制,有9个八位字节。作为其中的一部分我几乎已经取得了成功,但最后还有一件事就是以2位数格式获得价值。
string1= "aa.aa.aa.aa.aa.aa.aa.aa.ff"
string2= "00.00.00.00.00.00.00.00.01"
当我添加这两个时,我得到的是aa.aa.aa.aa.aa.aa.aa.ab.0
,但我希望价值为aa.aa.aa.aa.aa.aa.aa.ab.00
。 (2个零)。
我尝试使用
temp = '%02d' % string3
但我收到了错误
TypeError: %d format: a number is required, not str
因为我试图用字符串做。
答案 0 :(得分:1)
您可以拆分字符串,用前导零填充每个部分并再次连接:
s = "aa.aa.aa.aa.aa.aa.aa.ab.0"
print '.'.join(["{0:0>2}".format(w) for w in s.split('.')])
输出:
aa.aa.aa.aa.aa.aa.aa.ab.00
(填充基于this answer。)
基于map
的更短版本:
print '.'.join(map("{0:0>2}".format, s.split('.')))
答案 1 :(得分:0)
您可以改进创建方式,而不是修复生成的string3
。如果将summands转换为整数,添加它们并将结果转换回十六进制表示,则不必担心丢失零:
a = "aa.aa.aa.aa.aa.aa.aa.aa.ff"
b = "00.00.00.00.00.00.00.00.01"
c = hex(int(a.replace('.', ''), 16) + int(b.replace('.', ''), 16))[2:-1]
print '.'.join(i+j for i,j in zip(c[::2], c[1::2]))
输出:
aa.aa.aa.aa.aa.aa.aa.ab.00
参考文献:
.
:https://stackoverflow.com/a/3258596/3419103