python十六进制和十进制相互转换以及由补码求原码

本文介绍了Python中如何进行十六进制与十进制之间的转换,包括使用str()和int(a, 16)进行十六进制转十进制,以及使用hex(a)进行十进制转十六进制。同时,文章还讲解了如何从补码求得原码,涉及到了负数和正数的处理。" 69936941,5762772,Linux可执行程序的装载与执行详解,"['Linux', '系统调用', '程序执行', '汇编语言', '内核编程']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。结果正确。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值