Python为长数字添加一个L:>>> hex(int(15579202759033880576))
'0xd834725e00000000L'
再加一个字符。使用其他方法创建十六进制数:
^{pr2}$
相反。^{} function允许您使用format spec mini language来转换数据;x在本例中是一个小写的十六进制表示,您不需要切片任何内容:>>> format(15579202759033880576, '016x')
'd834725e00000000'
请注意此处格式中的016;如果您的数字小于16个十六进制数字,则会为您填充零:>>> format(1557920, '016x')
'000000000017c5a0'
字节交换也可以更容易地完成;python支持多个赋值,允许您交换两个值,而不需要临时变量:for i in range(0, length, 2):
data[i], data[i + 1] = data[i + 1], data[i]
因此,您的hextransform方法可以简化为:def hextransform(data, length):
data = format(data, '0{0}x'.format(length))
assert(len(data) == length), '{0!r}, {1}'.format(data, length)
# Swap 'bytes' in the network ID
data = list(data)
for i in range(0, length, 2):
data[i], data[i + 1] = data[i + 1], data[i]
data.reverse()
return data
导致:>>> hextransform(15579202759033880576, 16)
['0', '0', '0', '0', '0', '0', '0', '0', '5', 'e', '7', '2', '3', '4', 'd', '8']