1 十六进制转十进制
1)str(a)
若a本身是以十六进制表示的,那么直接打印出来的是十进制的数值。str()可以将十六进制的数强制转换成十进制的字符串:
num = 0xFFFF
print('num的值为', num)
print('num的类型为', type(num))
print('str(0xFFFF)的值为', str(num))
print('str(0xFFFF)的类型为', type(str(num)))
运行结果:
2)int(a, 16)
其中,a必须是字符串格式。这种方式适用于数值本身是以字符串形式存储的情况。例如以下两段代码,只有第二段的结果是正确的。
num = 0xFFFF
print(int(str(num)), 16)
num = '0xFFFF'
print(int(num), 16)
运行结果:
2 十进制转十六进制
hex(a)
其中a为int整型,而转换结果为字符串类型:
print(hex(65535))
print(type(hex(65535)))
运行结果:
3 由补码求原码
当得到的4位16进制数以补码形式呈现时,需要我们对其再作处理,才能得到含符号的十进制数据:
data = []
msg = ['0x0124', '0xFFB3', '0xB75E', '0x005D']
for i in range(len(msg)):
data.append(msg[i])
data[i] = int(data[i], 16)
if (data[i] & 0x8000 == 0x8000):
data[i] = -((data[i] - 1) ^ 0xFFFF)
# 由补码求得原码,一定记得取反得是'^ 0xFFFF',不能是'^ 0x7FFF'
运行结果:
而通过在线原码补码转换器可以验证,0xFFB3和0xB75E的原码分别位-77和-18594,正数的补码即原码,0x0124和0x005D的原码分别为292和93。结果正确。