>>> int('1101',2)
13
>>> int('0o226',8) #00226 0:阿拉伯数字零 o:小写英文字母 o 226:八进制数
150
>>> int('0x96',16)
150
>>> bin(13)
'0b1101'
>>> bin(0o37) #0o37 0:阿拉伯数字0 o:八进制表示
'0b11111'
>>> bin(0x33)
'0b110011'
>>> oct(0b10110011111)
'0o2637'
>>> hex(0b10110011111)
'0x59f'
第一种:他们之间的转换可以先转成二进制然后再相互转换。
第二种:他们之间的转换可以先转成十进制然后再相互转换。
>>> oct(0x37)
'0o67'
>>> hex(0o67)
'0x37'
我们想把一个整型数据转换为字符串,常用的方式是直接使用str(),但是有时想转成16进制的字符串形式,如125转为’0x7D’这种,下面就讲述2种方法来实现这个目的,
data = 125
print(hex(data))
打印如下,
如果整型数据时2,则打印为
可以看到hex()确实可以把整数转为16进制形式的字符串,但是有点美中不足,如A~F字符只能是小写,数字是16以下就会只占一个位置,有时打印多个数据,希望整齐划一都占2个位置,这就无法满足需求了。这时可以使用format()方法。
2. 使用format()
format()是个非常牛逼的方法,功能类似C语言里的printf,使用起来也是非常简单方便,
data1 = 125
data2 = 2
str1 = '0x{:02X}'.format(data1)
str2 = '0x{:02X}'.format(data2)
print(str1, str2)
输出如下,
:02X表示输出成16进制格式,占位符是2个。
format()方法可以按照用户需要打印各种格式,可以取代以前的%打印方法,具体操作可以查看相关资料。
Python实现"数字转换为十六进制"的两种方法
算法题:
给定一个整数,写一个算法将它转换为16进制,对于负数,可以使用two’s complement方法
注意:
16进制(a-f)只包括小写字母
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
Example :
Input:26
Output:“1a”
Input:-1
Output: “ffffffff”
1:自然数转16进制的方法和转二进制一样.负数则先取反、再转31位二进制、再反码、再反码+1、再加上符号位(此时32位)、最后再转16进制
def toHex(self, num):
"""
:type num: int
:rtype: str
"""
chaDic = {10: 'a', 11: 'b', 12: 'c', 13: 'd', 14: 'e', 15: 'f'}
if num >= 0:
hexStr = ""
while num >= 16:
rest = num % 16
hexStr = chaDic.get(rest, str(rest)) + hexStr
num //= 16
hexStr = chaDic.get(num, str(num)) + hexStr
return hexStr
else:
if num == -2147483648: #特殊情况,负数最大值
return "80000000"
num = -num #负数取反
bitList = [0] * 31
tail = 30
while num >= 2: #数字转二进制
rest = num % 2
bitList[tail] = rest
tail -= 1
num //= 2
bitList[tail] = num
for i in range(31): # 反码
bitList[i] = 1 if bitList[i] == 0 else 0
tail = 30
add = 1
while add + bitList[tail] == 2: #反码加1
bitList[tail] = 0
tail -= 1
bitList[tail] = 1
bitList = [1] + bitList #添加负号
print bitList
hexStr = ""
for i in range(0, 32, 4): #二进制转16进制
add = 0
for j in range(0, 4):
add += bitList[i + j] * 2 ** (3 - j)
hexStr += chaDic.get(add, str(add))
return hexStr
2:如果输入整数是负数,则执行num = num + 2**23,然后统一进行转16进制处理(参考他人代码)
def toHex(self, num):
"""
:type num: int
:rtype: str
"""
chaDic = {10: 'a', 11: 'b', 12: 'c', 13: 'd', 14: 'e', 15: 'f'}
hexStr = ""
if num < 0:
num = num + 2**32
while num >= 16:
digit = num % 16
hexStr = chaDic.get(digit, str(digit)) + hexStr
num //= 16
hexStr = chaDic.get(num, str(num)) + hexStr
return hexStr
算法题来源:https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal/description/
参考博客链接:
https://blog.csdn.net/whahu1989/article/details/106004972
https://www.cnblogs.com/gkx0731/p/9501276.html