如何打印不同大小的小端十六进制数?

How to print little endian hex number of varying sizes?

我正在尝试将一系列小端十六进制数字写入文件(填充零,并且没有“0x”前体)。

这些数字的大小由用户决定。这是我目前所拥有的:

file.write( format( struct.unpack( '<I', struct.pack( '>I', i ) ) [0], '08x' ))

其中 'i' 是 for 循环的当前迭代。

到目前为止,这只打印了 4 字节的数字,用 I 表示。如果用户将定义大小,我该如何写数字?如果用户想要 6 字节,它应该写:

010000000000, 020000000000, etc

如果用户想要 2 字节,它应该写:

0100, 0200, etc

编辑:另外,当我将“08x”更改为“012x”时,我得到:

0000000001000000

所以如果我想要一个 8 字节的数字,我不能只更改“08x”部分...

不确定这是最好的方法,但它有效(如果我理解你的要求):

def f(number, length):
    s = '{:0{}x}'.format(number, length*2)
    return ''.join(s[i-2:i] for i in range(len(s), 0, -2))

for i in range(20):
    print(f(i, 6))

输出:

000000000000
010000000000
020000000000
030000000000
040000000000
050000000000
060000000000
070000000000
080000000000
090000000000
0a0000000000
0b0000000000
0c0000000000
0d0000000000
0e0000000000
0f0000000000
100000000000
110000000000
120000000000
130000000000