使用python内置的int、bin、hex、oct函数进行内置转换及注意事项

python进制转换时使用内置的int, hex, bin, oct时,要注意入参是否是字符串,以及函数入参是否必须为整数。

先看一段代码:

origin = 12345
hex_data = hex(origin)
print(hex_data)     # 0x3039
print(int(0x3039))  # 12345
print(int(str(hex_data), 16))  # 12345
print(int("0x3039", 16))  # 12345
# 二进制
bin_data = bin(origin)
print(bin_data)
print(int('0b11000000111001', 2))   # 0b11000000111001
print(int(bin_data, 2))     # 12345
print(int(hex_data, 16))    # 12345
# 二进制转16进制
print(hex(int(bin_data, 2)))    # 0x3039
print(hex(bin_data))    #TypeError: 'str' object cannot be interpreted as an integer
                        # hex:Return the hexadecimal representation of an integer.
print(int(bin_data))    # ValueError: invalid literal for int() with base 10: '0b11000000111001'
print(int(hex_data))    # ValueError: invalid literal for int() with base 10: '0x3039'
  1. 使用hex函数得到16进制,但是将返回结果直接转成10进制时会报错
hex_data = hex(origin)
print(int(hex_data)) # # ValueError: invalid literal for int() with base 10: '0x3039'
print(int("0x3039", 16))
print(int(hex_data, 16))

int函数的定义是将数字类型或者字符串类型转成整数

函数定义为def __init__(self, x, base=10)

而hex函数返回的整数的16进制表示,其实是有引号的,也就是说可以把结果看成字符串

下面是终端输出结果

hex(12345)
'0x3039'

但是单纯的0x3039其实是16进制,也就是数字类型,所以可以直接使用int(0x3039)

但是hex得到的返回值是字符串类型,所以在使用int函数时需要注明要转的字符串里面的内容是什么进制的,比如:int('0x3039', 16)

但是pycharm上使用print得到的结果并没有引号,所以会报错:

print(int(hex_data)) # ValueError: invalid literal for int() with base 10: '0x3039'

  1. 其他进制相互转换时,需要先转成10进制,再转成其他进制

比如要将2进制转成16进制,过程是2进制–>10进制–>16进制

因为hex(16进制),bin(二进制),oct(八进制)函数入参只接受整数。

比如八进制的函数定义:

def oct(*args, **kwargs): # real signature unknown; NOTE: unreliably restored from __doc__ 
    """
    Return the octal representation of an integer.
    
       >>> oct(342391)
       '0o1234567'
    """
    pass

eg:将12345对应的二进制转成16进制

先将0b11000000111001转成10进制,再用hex函数转成16进制

hex(int('0b11000000111001', 2))

以上,结合函数定义可以弄清楚如何使用python内置函数进行进制之间的转换。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值