我想在python中xor两个十六进制格式的字符串,比如' 45'和' 4e'。但如果结果在[0x00,0x0f]中,如何保持前导零?
hex(int('45', 16) ^ int('4e', 16))
给出' 0xb',而我期待' 0x0b'。
提前致谢。
答案 0 :(得分:1)
最简单的方法是使用str.format():
>>> '0x{:02x}'.format(0xb)
'0x0b'
答案 1 :(得分:0)
这里的问题是你对函数hex的期望。
hex()
仅为输出生成字符串表示。
证明:
>>> hex(2)+hex(15)
'0x20xf'
当然,这是完全无稽之谈,因为hex(2)
的字符串值和hex(15)
的字符串值只是被附加在一起。
解决方案是尽可能清楚地算术,然后选择你希望如何呈现结果。
计算结果为11:
>>> int('45', 16) ^ int('4e', 16)
11
然后格式化它。
旧方式:
>>> '0x%0.2x' % 11
'0x0b'
更新的方式:
>>> '0x'+format(11,'02x')
'0x0b'
或者:
>>> '0x{:02x}'.format(11)
'0x0b'
答案 2 :(得分:0)
对于相对较少的值(如0x00-0xff),将结果转换为十六进制字符串的一种实用且非常有效的方法是按照您希望的方式构建和使用查找表。构建表格时使用的'0x%02x' % v
表达式也只是一次转换单个值的简单而简洁的方法。
>>> HEXDEC = ['0x%02x' % v for v in (x+y for x in range(16) for y in range(16))]
>>> HEXDEC[int('45', 16) ^ int('4e', 16)]
'0x0b'
>>>