日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python3各种进制之间的转换方法

發布時間:2025/3/20 python 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python3各种进制之间的转换方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、2/8/10/16進制互轉

1 . 2/8/10/16進制賦值

# 二進制賦值以0b打頭 a = 0b1000 # 八進制賦值以0o打頭,第一個是數字0第二個是字母o b = 0o1100 # 十進制不需要特別標明 c = 1110 # 十六進制賦值以0x打頭 d = 0x1111

2 . 2/8/10/16進制互轉

其他進制轉二進制----bin(var)其他進制轉八進制----oct(var)其他進制轉十進制----int(var),其實不管賦值時用什么進制默認輸出都是十進制,所以可以不需要轉換其他進制轉十進制----hex(var)

二、數值和字符串互轉

數值轉字符串----str(num_var)

字符串轉數值----int(str_var)。注意str_var只有全是數字字符(0-9)時才能轉成功,如變量含有數字之外的字符(如abcd等)轉換會報錯:ValueError: invalid literal for int() with base 10

三、字符串和byte互轉

解碼的本質是選擇二進制對應的圖形,編碼的本質是把字符圖形轉成相應編碼的二進制。這只是一種顯示的變化,在內存上并不一定有變化。

字符串轉byte----str_var.encode()

byte轉字符串----byte_var.decode()

四、網絡數據包/二進制文件中的各種互轉

分析一個網絡數據包/二進制文件,基本進行的操作就是將bin十六進制轉int、轉byte、轉str;而相反,構造一個網絡數據包/二進制文件,要做的就是將int、將byte、將str轉bin十六進制。

1 . 概念定義

由于bin十六進制、int、byte、str這幾個概念不是標準稱呼(我也不懂標準稱呼是什么),所以下邊先用一張wireshark截獲取一個http數據包的截圖對這幾個名詞的定義進行約定,然后對各種轉換的意思進行說明。

1.1 bin十六進制/int/byte/str的定義

bin十六進制----圖中b“\x01\x79”、b“\x04\xf9\x38\xad\x13\x26”等十六進制表示形式;每一位是4bit的十六進制數

  • int----就是正常的10進制整數,如圖中Total Lenght的377等值

  • byte----b‘04f9381326’的形式;每一位是ascii編碼的byte(8bit)

  • str----就是字符串,如圖中的“HTTP”等

1.2 bin十六進制和int/byte/str互轉的定義

  • bin十六進制轉int----將二進制文件中的b“\x01\x79”轉為“377”的過程。本質上講,就是把一個byte型十六進制數,轉成十進制數的過程。(注意區別:int(0x178)時參數0x179是16進制整型而b’\x01\x79’是byte數組)

  • int轉bin十六進制----將“377”轉為二進制文件中的b“\x01\x79”的過程。本質上講,就是把一個十進制數,轉成byte型十六進制數的過程。(注意區別:hex(377)得到的0x179是16進制整型而b’\x01\x79’是byte數組)

  • bin十六進制轉byte----將二進制文件中的b“\x04\xf9\x38\xad\x13\x26”取為b‘04f9381326’的過程。本質上講,就是將每個十六進制數(4bit),轉成一個采用ascii編碼的byte(8bit)的過程。

  • byte轉bin十六進制----將b‘04f9381326’取為二進制文件中的b“\x04\xf9\x38\xad\x13\x26”的過程。本質上講,就是將每個采用ascii編碼的byte(8bit),轉成一個十六進制數(4bit)的過程。

  • bin十六進制轉str----將二進制文件中b’\x48\x54\x54\x50’取為字符串‘HTTP’的過程。本質上講,就是將ascii編碼轉成對應字符的過程。

  • str轉bin十六進制----將字符串‘HTTP’取為二進制文件中b’\x48\x54\x54\x50’的過程。本質上講,字符轉成就是對應的ascii編碼的過程。

2 各種互轉實現

2.1 bin十六進制與int互轉實現

bin十六進制轉int主要在分析二進制文件、數據包頭時獲取長度等值時使用;相反,int轉bin十六進制就是在構造二進制文件、數據包頭時寫入長度等值時使用。

另外注意把bin十六進制當數值時有大端和小端兩種模式,大端意思是開頭(低地址)權重大,小端為開頭(低地址)權重小。文件系統一般用小端模式,網絡傳輸一般用大端模式。

  • int轉bin十六進制----num_var.to_bytes(lenght,byteorder),lenght表示轉成的多少個字節;byteorder可為big或little分別表示轉bin十六進制時使用大端模式還是小端模式。

  • bin十六進制轉int----int.from_bytes(byte_var,byteorder),byte_var是要轉成數值的變bin十六進制變量,byteorder還是一樣可為big或little,分別表示從bin十六進制轉為數值時把bin十六進制當大端模式還是小端模式處理。

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' >>> int.from_bytes(b'\x01\x79', 'big') 377 >>> a = 377 >>> a.to_bytes(2,'big') b'\x01y'

注意圖中的b’\x01y’其實就是b’\x01\x79’(y的ascii編碼是十六進制的79)

2.2 bin十六進制和byte互轉實現

bin十六進制轉byte主要在分析二進制文件、數據包頭時獲取mac地址、密鑰等平時就以十六進制表示的值時使用;相反,byte轉bin十六進制就是在構造二進制文件、數據包頭時寫入mac地址、密鑰等平時就以十六進制表示的值時使用。

  • bin十六進制轉byte----binascii.b2a_hex(bin_var),bin_var為byte變量常從二進制文件中讀出; 如binascii.b2a_hex(b’\x04\xf9\x38\xad\x13\x26’)結果為b’04f9381326‘

  • byte轉bin十六進制----binascii.a2b_hex(hex_byte_var),hex_byte_var為十六進制字節串; 如binascii.a2b_hex(b’04f9381326’)結果為b’\x04\xf98\x13&’(8對應的ascii編碼是38,&對應的ascii編碼是26)

>>> binascii.b2a_hex(b'\x04\xf9\x38\xad\x13\x26') b'04f938ad1326' >>> >>> binascii.a2b_hex(b'04f9381326') b'\x04\xf98\x13&'

2.3 bin十六進制與str互轉

bin十六進制轉主要在分析二進制文件、數據包頭時獲取其量的字符串時使用;相反,byte轉bin十六進制就是在構造二進制文件、數據包頭時寫入字符串時使用。

bin十六進制與str互轉其實就是上邊第三大點中的字符串和byte互轉;此處的bin十六進制就是上邊第三大點中的byte的本質。(b’\x48\x54\x54\x50’和b’HTTP’在內存中是一模一樣的)

>>> var = b'\x48\x54\x54\x50' >>> var.decode( 'HTTP' >>>var = 'HTTP' >>> var.encode() b'HTTP'

總結

以上是生活随笔為你收集整理的Python3各种进制之间的转换方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。