计算十六进制字符串的所有排列
Calculate all permutations for a hex string
我想计算十六进制字符串的所有排列。从 000000000000 到 FFFFFFFFFFFF。
目前我正在使用此代码;
def calc_hex(iterable, r):
pool = tuple(iterable)
n = len(pool)
if not n and r:
return
indices = [0] * r
yield tuple(pool[i] for i in indices)
while True:
for i in reversed(range(r)):
if indices[i] != n - 1:
break
else:
return
indices[i:] = [indices[i] + 1] * (r - i)
yield tuple(pool[i] for i in indices)
f = calc_hex('0123456789ABCDEF', 12)
但并不是所有的组合都被计算出来(例如,0022FB4D31F8 缺失)。
怎么了?
非常感谢任何帮助。
鉴于 "all permutations of a hex string" 实际上只是适当范围内所有整数的十六进制表示(0
到 281474976710655
,在此案例),为什么不呢:
def hex_perms(digits=12):
x = 0
max_ = 16 ** digits
while x < max_:
yield '{:0{len}X}'.format(x, len=digits)
x += 1
请注意,您不能使用 xrange
,因为 Python int too large to convert to C long
用于 16**12
。
我想计算十六进制字符串的所有排列。从 000000000000 到 FFFFFFFFFFFF。 目前我正在使用此代码;
def calc_hex(iterable, r):
pool = tuple(iterable)
n = len(pool)
if not n and r:
return
indices = [0] * r
yield tuple(pool[i] for i in indices)
while True:
for i in reversed(range(r)):
if indices[i] != n - 1:
break
else:
return
indices[i:] = [indices[i] + 1] * (r - i)
yield tuple(pool[i] for i in indices)
f = calc_hex('0123456789ABCDEF', 12)
但并不是所有的组合都被计算出来(例如,0022FB4D31F8 缺失)。
怎么了?
非常感谢任何帮助。
鉴于 "all permutations of a hex string" 实际上只是适当范围内所有整数的十六进制表示(0
到 281474976710655
,在此案例),为什么不呢:
def hex_perms(digits=12):
x = 0
max_ = 16 ** digits
while x < max_:
yield '{:0{len}X}'.format(x, len=digits)
x += 1
请注意,您不能使用 xrange
,因为 Python int too large to convert to C long
用于 16**12
。