bin()函数
把一个整数转为为符合二进制字面值规范(“0b”开头的“0”和“1”的序列)的字符串。必选、按位参数一个。
调用方式1:整数参数,bin(intNum)。
>>>bin(12345)
'0b11000000111001'
>>>bin(-12345)
'-0b11000000111001'
>>>bin(12.345)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'float' object cannot be interpreted as an integer
调用方式2:定义了__index__()方法的对象参数,bin(obj)。
>>>class BTest:
... def __index__(self):
... return 123
...
>>>bin(BTest())
'0b1111011'
>>>class BNTest:
... pass
...
>>>bin(BNTest())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'BNTest' object cannot be interpreted as an integer
若要控制是否显示前缀“0b”,可以采用以下两种方案:
>>>format(123, '#b'), format(123, 'b')
('0b1111011', '1111011')
>>>f'{123:#b}', f'{123:b}'
('0b1111011', '1111011')
更多有关格式化打印的信息,请看format()内置函数。
oct()函数
把一个整数转为为符合八进制字面值规范(“0o”开头的“0”到“7”的系列)的字符串。必选、按位参数一个。
调用方式1:整数参数,oct(intNum)。
>>>oct(12345)
'0o30071'
>>>oct(-12345)
'-0o30071'
>>>oct(12.345)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'float' object cannot be interpreted as an integer
调用方式2:定义了__index__()方法的对象参数,oct(obj)。
>>>class OTest:
... def __index__(self):
... return 123
...
>>>oct(OTest())
'0o173'
>>>class ONTest:
... pass
...
>>>oct(ONTest())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'ONTest' object cannot be interpreted as an integer
若要控制是否显示前缀“0o”,可以采用以下面的方案:
>>>'%#o' % 12345, '%o' % 12345
('0o30071', '30071')
>>>format(12345, '#o'), format(12345, 'o')
('0o30071', '30071')
>>>f'{12345:#o}', f'{12345:o}'
('0o30071', '30071')
更多有关格式化打印的信息,请看format()内置函数。
hex()函数
把一个整数转为为符合十六进制字面值规范(“0x”开头的“0”到“9”和“a”到“f”的系列)的字符串。必选、按位参数一个。
调用方式1:整数参数,hex(intNum)。
>>>hex(12345)
'0x3039'
>>>hex(-12345)
'-0x3039'
>>>hex(0o30071)
'0x3039'
>>>hex(0x3039)
'0x3039'
>>>hex(0b11000000111001)
'0x3039'
>>>hex(12.345)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'float' object cannot be interpreted as an integer
注:如果要转换浮点数为十六进制字符串形式,请使用 float.hex() 方法。
调用方式2:定义了__index__()方法的对象参数,hex(obj)。
>>>class HTest:
... def __index__(self):
... return 123
...
>>>hex(HTest())
'0x7b'
>>>class HNTest:
... pass
...
>>>hex(HNTest())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'HNTest' object cannot be interpreted as an integer
若要控制是否显示前缀“0x”和大小写,可以采用以下面的方案:
>>>'%#x' % 255, '%x' % 255, '%X' % 255, '%#X' % 255
('0xff', 'ff', 'FF', '0XFF')
>>>format(255,'#x'),format(255,'x'),format(255,'X'),format(255,'#X')
('0xff', 'ff', 'FF', '0XFF')
>>> f'{255:#x}', f'{255:x}', f'{255:X}', f'{255:#X}'
('0xff', 'ff', 'FF', '0XFF')
更多有关格式化打印的信息,请看format()内置函数。
float.hex()方法
把浮点数转换为浮点数十六进制字符串。
>>>float.hex(3740.0)
'0x1.d380000000000p+11'
>>>f=3740.0
>>>f.hex()
'0x1.d380000000000p+11'
>>>f.hex(3740.0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: float.hex() takes no arguments (1 given)
注:float.hex()是对象方法。
classmethod float.fromhex()方法
把浮点数十六进制字符串转换为浮点数。
>>>float.fromhex('0x1.d380000000000p+11')
3740.0
>>>f=0.0
>>>f.fromhex('0x1.d380000000000p+11')
3740.0
注:float.fromhex()是类方法classmethod 。
为了区分类方法和对象方法在定义和使用上的不同,编写下面的程序(文本代码附录1):
运行结果:
浮点数十六进制字符串:
尾数部分除了有一个小数点外,其它与整数的十六进制相同;如果有指数部分,前面使用的是“p”而不是“e”,是以2为底的十进制整数。例如,浮点数十六进制字符串 0x3.a7p10 表示浮点数 (3 + 10./16 + 7./16**2) * 2.0**10 即 3740.0:
>>>float.fromhex('0x3.a7p10')
3740.0
例1 把5进制整数1043120101转为二进制、八进制、十进制、十六进制字符串。
程序代码(文本代码附录2)
运行结果:
例2 把十六进制浮点数0xa.F8BceFp5转为十进制数,打印出来,然后再转回十六进制打印出来。
程序代码(文本代码附录3)
运行结果:
练习题:
1、把7进制数5063140304转为二进制、八进制、十进制、十六进制字符串。
2、把十六进制浮点数0x8.aCB2f1Dp6转为十进制数,打印出来,然后再转回十六进制打印出来。
附录1:
#classmethod测试
class CMTest:
#类方法
@classmethod
def ct(cls,s):
'''@cls类本身@s其他参数'''
print(cls)
print(s)
#对象方法
def ot(self,s):
'''@self对象本身@s其他参数'''
print(self)
print(s)
CMTest.ct("类直接调用类方法,自动传入类本身。")
t=CMTest()
t.ct("对象调用类方法,自动传入对象所属类。")
CMTest.ot(t, "类直接调用对象方法,需手动传入一个对象。")
t.ot("对象调用对象方法,自动传入对象本身。")
附录2:
#进位制字符串输出
_5Str="1043120101"
num = int(_5Str,5)
#二进制
print(bin(num))
#八进制
print(oct(num))
#十进制
print(num)
#十六进制
print(hex(num))
附录3:
#进位制字符串输出
_16Str="0xa.F8BceFp5"
#转为十进制
num = float.fromhex(_16Str)
#十进制
print(num)
#十六进制
print(num.hex())