上QQ阅读APP看书,第一时间看更新
1.3 进制转换
在实际应用中,通常会因为一些特殊需求,需要转换或者输出使用二进制、八进制或十六进制表示的整数,如为防止某些数字以明文的形式出现。
为了将整数转换为二进制、八进制或十六进制的文本串,我们可以分别使用bin()、oct()或hex()函数,相关代码(binary_exp.py)如下:
x = 1234 print(f'binary of {x} is: {bin(x)}') print(f'octal of {x} is: {oct(x)}') print(f'hexadecimal of {x} is: {hex(x)}')
执行py文件,输出结果如下:
binary of 1234 is: 0b10011010010 octal of 1234 is: 0o2322 hexadecimal of 1234 is: 0x4d2
如果不想输出0b、0o或者0x前缀,可以执行如下操作(binary_exp.py):
print(f'binary not show 0b: {x: b}') print(f'octal not show 0o: {x: o}') print(f'hexadecimal not show 0x: {x: x}')
执行py文件,输出结果如下:
binary not show 0b: 10011010010 octal not show 0o: 2322 hexadecimal not show 0x: 4d2
整数是有符号的,如果处理的是负数,输出结果会包含一个负号,示例(binary_exp.py)如下:
x = -1234 print(f'binary of {x} is: {x: b}') print(f'hexadecimal of {x} is: {x: x}')
执行py文件,输出结果如下:
binary of -1234 is: -10011010010 hexadecimal of -1234 is: -4d2
如果想得到一个无符号值,需要增加一个指示最大位长度的值。如为了显示32位的值,可以执行如下操作(binary_exp.py):
print(f'(2**32 + x) binary result:{2**32 + x: b}') print(f'(2**32 + x) hexadecimal result: {2**32 + x:x}')
执行py文件,输出结果如下:
(2**32 + x) binary result: 11111111111111111111101100101110 (2**32 + x) hexadecimal result: fffffb2e
为了以不同的进制转换整数字符串,可以使用带有进制的int()函数,相关代码(binary_exp.py)如下:
print(int('4d2', 16)) print(int('10011010010', 2))
执行py文件,输出结果如下:
1234 1234
大多数情况下处理二进制、八进制和十六进制整数是很简单的,只要记住,这些转换属于整数和其对应的文本表示之间的转换即可。
使用八进制时需要注意,Python中八进制数的语法与其他进制的语法稍有不同。如像下面这样使用八进制会出现错误:
import os os.chmod('test.py', 0755)
我们需确保八进制数的前缀是0o,示例如下:
os.chmod('test.py', 0o755)