0.缘起
最近在写代码跟硬件通信,需要进制转换,发现自己对这块不熟悉,所以特意去看了官方文档
1.转10进制
使用int(x,base=10)函数可以把,二进制,八进制,十六进制,转成十进制
x参数是字符串,base 说明x是什么进制的数据
>>> int("ff",16)
255
>>> int("1000",2)
8
>>> int('77',8)
63
>>>
2.转16进制
使用hex(x)函数转16进制,x是一个int整数类型,如果不是整数类型,python会使用__index()__方法返回一个整数类型,
所以
转16进制第一种办法:是八进制跟二进制先转成10进制
第二种办法:传对应的进制正确写法(0b二进制开头,0o八进制开头),python自己转
1.先转成10进制
>>> hex(15)
'0xf'
>>> hex(255)
'0xff'
>>> hex(int("1000",2))
'0x8'
>>> hex(int("77",8))
'0x3f'
>>>
2.直接转
>>> hex(0b101010)
'0x2a'
>>> hex(0o7)
'0x7'
>>>
3.转2进制
使用bin(x)函数转2进制,x是一个int整数类型,如果不是整数类型,python会使用__index()__方法返回一个整数类型,
所以
转2进制第一种办法:是8进制跟16进制先转成10进制
第二种办法:传对应的进制正确写法(0x十六进制开头,0o八进制开头),python自己转
1.先转成10进制
>>> bin(8)
'0b1000'
>>> bin(int("ff",16))
'0b11111111'
>>> bin(int("77",8))
'0b111111'
>>>
2.直接转
>>> bin(0x15)
'0b10101'
>>> bin(0o7)
'0b111'
>>>
4. 转8进制
使用oct(x)函数转8进制,x是一个int整数类型,如果不是整数类型,python会使用__index()__方法返回一个整数类型,
所以
转8进制第一种办法:是2进制跟16进制先转成10进制
第二种办法:传对应的进制正确写法(0b二进制开头,0x十六进制开头),python自己转
1.先转成10进制
>>> oct(8)
'0o10'
>>> oct(int("ff",16))
'0o377'
>>> oct(int("101010",2))
'0o52'
>>>
2.直接转
>>> oct(0xff)
'0o377'
>>> oct(0b10101)
'0o25'
>>>
5.总结
- 正常使用肯定会直接转
- 忘记了二进制是0b开头,十六进制是0x开头,八进制是0o开头,所有可用int(x,base=10)转成10进制
- 这个int里面x是字符串,base是默认10进制,意思是可以把x转成任意的进制,比如3进制,4进制等,但是需要x符号进制要求,你不能把像如下这样
>>> int("99",8)
Traceback (most recent call last):
File "<pyshell#70>", line 1, in <module>
int("99",8)
ValueError: invalid literal for int() with base 8: '99'
>>>
6.官方文档
以下函数都是在Built-in Functions里面
hex(x)
Convert an integer number to a lowercase hexadecimal string prefixed with “0x”. If x is not a Python int object, it has to define an __index__() method that returns an integer
bin(x)
Convert an integer number to a binary string prefixed with “0b”. The result is a valid Python expression. If x is not a Python int object, it has to define an __index__() method that returns an integer.
oct(x)
Convert an integer number to an octal string prefixed with “0o”. The result is a valid Python expression. If x is not a Python int object, it has to define an __index__() method that returns an integer
object.__index__(self)
Called to implement operator.index(), and whenever Python needs to losslessly convert the numeric object to an integer object (such as in slicing, or in the built-in bin(), hex() and oct() functions). Presence of this method indicates that the numeric object is an integer type. Must return an integer.
If __int__(), __float__() and __complex__() are not defined then corresponding built-in functions int(), float() and complex() fall back to __index__().
class int([x])
class int(x, base=10)
Return an integer object constructed from a number or string x, or return 0 if no arguments are given. If x defines __int__(), int(x) returns x.__int__(). If x defines __index__(), it returns x.__index__(). If x defines __trunc__(), it returns x.__trunc__(). For floating point numbers, this truncates towards zero.
If x is not a number or if base is given, then x must be a string, bytes, or bytearray instance representing an integer literal in radix base. Optionally, the literal can be preceded by + or - (with no space in between) and surrounded by whitespace. A base-n literal consists of the digits 0 to n-1, with a to z (or A to Z) having values 10 to 35. The default base is 10. The allowed values are 0 and 2–36. Base-2, -8, and -16 literals can be optionally prefixed with 0b/0B, 0o/0O, or 0x/0X, as with integer literals in code. Base 0 means to interpret exactly as a code literal, so that the actual base is 2, 8, 10, or 16, and so that int('010', 0) is not legal, while int('010') is, as well as int('010', 8).