用Python內建函數輕鬆實現各種進位數之間的轉換

來源:互聯網
上載者:User

標籤:int   python   bin   進位轉換   hex   

0.說明

    

    9個月沒有寫過Python了,這9個月都在華為的ICT知識海洋裡遨遊,前段時間剛剛通過了HCIE的認證,想著還是喜歡Python和Linux多些,所以又回來了,後面會有越來越多的Python乾貨分享給大家,比如後面會打算寫一個完整的Linux主機監控項目的教程給初入門的朋友,相信這會是非常不錯的體驗。

    那段時間,曾經有些時候,我需要對各種進位進行轉換,因為雖然那會不寫Python了,但是還是用Python內建的解譯器用來做簡單的數學計算,很方便。

    在網上找,看有沒有方法可以實現各種進位的轉換,然後找到的結果都是各網友自己實現的各種一堆的演算法,還好當初沒有看呢,其實Python的內建函數就可以完美地實現各種進位之間的轉換了,非常實用,覺得學電腦專業的一定要會這些轉換。

    當然,主要是討論二進位、八進位、十進位、十六進位之間的轉換。



1.十進位數轉換為其它進位數


(1)十進位數轉換為位元

    通過內建函數bin實現,舉例如下:

>>> bin(10)‘0b1010‘>>> bin(255)‘0b11111111‘>>> bin(65535)‘0b1111111111111111‘


(2)十進位數轉換為八位元

    通過內建函數oct實現,舉例如下:

>>> oct(10)‘0o12‘>>> oct(255)‘0o377‘>>> oct(65535)‘0o177777‘


(3)十進位數轉換為十六進位數

    通過內建函數hex實現,舉例如下:

>>> hex(10)‘0xa‘>>> hex(255)‘0xff‘>>> hex(65535)‘0xffff‘



2.其它進位數轉換為十進位數


    將位元、八位元和十六進位數轉換為十進位數,都是通過內建函數int實現,只是不同的是int所接收的第二個參數不同,可以通過help(int)查看其所接收的參數說明:

>>> help(int)Help on class int in module builtins:class int(object) |  int(x=0) -> integer |  int(x, base=10) -> integer |   |  Convert a number or string to an integer, or return 0 if no arguments |  are given.  If x is a number, return x.__int__().  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 the |  given base.  The literal can be preceded by ‘+‘ or ‘-‘ and be surrounded |  by whitespace.  The base defaults to 10.  Valid bases are 0 and 2-36. |  Base 0 means to interpret the base from the string as an integer literal. |  >>> int(‘0b100‘, base=0) |  4

    也就是所,int函數中還有個預設參數base,其值預設為10,表示轉換為十進位數,如果為2,則表示轉換為位元,不過需要注意的是,如果需要顯示指定base參數,那麼第一個參數的資料類型必須為字串,可以看下面的例子:

>>> int(1010,2)Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: int() can‘t convert non-string with explicit base


(1)位元轉換為十進位數

    舉例如下:

>>> int(‘1010‘,2)10>>> int(‘11111111‘,2)255>>> int(‘1111111111111111‘,2)65535


(2)八位元轉換為十進位數

    舉例如下:

>>> int(‘12‘,8)10>>> int(‘377‘,8)255>>> int(‘177777‘,8)65535


(3)十六進位數轉換為十進位數

    舉例如下:

>>> int(‘a‘,16)10>>> int(‘ff‘,16)255>>> int(‘ffff‘,16)65535



3.各種進位數之間的相互轉換


    上面給的情況都是十進位數與各種進位之間的相互轉換,其實二進位轉八進位或者二進位轉十六進位也是可以的,只是還是需要通過十進位作為橋樑來進行轉換,下面舉幾個例子。


(1)位元轉換為八位元

    比如需要將位元0b1010轉換為八位元。

先轉換為十進位數:

>>> int(‘1010‘,2)10

再轉換為八位元:

>>> oct(10)‘0o12‘

或者一步到位:

>>> oct(int(‘1010‘,2))‘0o12‘


(2)八位元轉換為十六進位數

    比如需要將八位元0o377轉換為十六進位數。

先轉換為十進位數:

>>> int(‘377‘,8)255

再轉換為十六進位數:

>>> hex(255)‘0xff‘

或者一步到位:

>>> hex(int(‘377‘,8))‘0xff‘



    當然,如果需要八進位轉二進位或者其它情況的,也是同樣的思路,整個過程的思路都是非常清晰和簡潔的。



4.有什麼用


    僅僅是用作計算的話用處也已經很大了,當然,在以後的項目開發中也完全有可能會用到的。


本文出自 “香飄葉子” 部落格,請務必保留此出處http://xpleaf.blog.51cto.com/9315560/1890242

用Python內建函數輕鬆實現各種進位數之間的轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.