如何打印不同大小的小端十六进制数?
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
我正在尝试将一系列小端十六进制数字写入文件(填充零,并且没有“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