如何按自己想要的数字顺序生成n字节的十六进制数

比如8字节的十六进制数,从00 00 00 00 00 00 00 00 一直生成到22 22 22 22 22 22 22 22
运行之后程序开始按
00 00 00 00 00 00 00 01
00 00 00 00 00 00 00 02
00 00 00 00 00 00 00 10
00 00 00 00 00 00 00 11
00 00 00 00 00 00 00 12
00 00 00 00 00 00 00 20
……
22 22 22 22 22 22 22 21
22 22 22 22 22 22 22 22
——的顺序依次生成数字,
其中在这个过程中的十六进制数只有 0/1/2三个数字
(相当于在十六进制的情况按三进制来运行)
但是不是必须是0/1/2还可以按自己的设定像弄成4/5/6/7或者2/4/6/8之类的情况
有代码的话最好orz

以下3字节的可以运行,8字节 估计内存不够用,结果列表中会有3^16个元素


>>> a = b = ['0','1','2']
>>> bytes = 3
>>> for _ in range(1,2*bytes):
    b = [i+j for i in a for j in b]
>>> c = [int(i,16) for i in b]

换种方法:

>>> 
def translate(i,n):
    num = ['0','1','2']
    ret=[]
    while True:
        d,m = divmod(i, len(num))
        ret.append(num[m])
        if d==0:break
        i = d
    return ''.join(ret[::-1]).rjust(n,num[0])

>>> for i in range(6):
    print(translate(i,16))

    
0000000000000000
0000000000000001
0000000000000002
0000000000000010
0000000000000011
0000000000000012
>>> for i in range(3**16-3,3**16):
    print(translate(i,16))

    
2222222222222220
2222222222222221
2222222222222222
>>> 

要其它的排列,只要替换列表中的元素 num = ['0','1','2'],比如: num = ['2','4','6','8']
translate(i,n)  i 表示要转的整数, n 表示要输出的位数bits = 字节数的2

如有帮助,请给个采纳,谢谢!