Python3最重要的新特性大概要算是對文本和二進制數據做了更爲清晰的區別。文本老是Unicode,由str類型表示,二進制數據則由bytes類型表示。Python3不會以任意隱式的方式混用str和bytes,正是這使得二者的區分特別清晰。你不能拼接字符串和字節包,也沒法在字節包裏搜索字符串(反之亦然),也不能將字符串傳入參數爲字節包的函數(反之亦然)。這是件好事。html
字符串是以字符爲單位進行處理的,bytes類型是以字節爲單位處理的。編程
bytes數據類型在全部的操做和使用甚至內置方法上和字符串數據類型基本同樣,也是不可變的序列對象。網絡
bytes對象只負責以二進制字節序列的形式記錄所需記錄的對象,至於該對象到底表示什麼(好比究竟是什麼字符)則由相應的編碼格式解碼所決定。Python3中,bytes一般用於網絡數據傳輸、二進制圖片和文件的保存等等。能夠經過調用bytes()生成bytes實例,其值形式爲 b'xxxxx',其中 'xxxxx' 爲一至多個轉義的十六進制字符串(單個 x 的形式爲:\x12
,其中\x爲小寫的十六進制轉義字符,12爲二位十六進制數)組成的序列,每一個十六進制數表明一個字節(八位二進制數,取值範圍0-255),對於同一個字符串若是採用不一樣的編碼方式生成bytes對象,就會造成不一樣的值.函數
無論怎樣,字符串和字節包之間的界線是必然的的,下面的圖解很是重要,務必要牢記於心:編碼
b = b'' # 建立一個空的bytes
b = byte() # 建立一個空的bytes
b = b'hello' # 直接指定這個hello是bytes類型
b = bytes('string',encoding='編碼類型') #利用內置bytes方法,將字符串轉換爲指定編碼的bytes
b = str.encode('編碼類型') # 利用字符串的encode方法編碼成bytes,默認爲utf-8類型
bytes.decode('編碼類型'):將bytes對象解碼成字符串,默認使用utf-8進行解碼。code
對於bytes,咱們只要知道在Python3中某些場合下強制使用,以及它和字符串類型之間的互相轉換,其它的基本照抄字符串。htm
簡單的省事模式:對象
string = b'xxxxxx'.decode()
直接以默認的utf-8編碼解碼bytes成string圖片
b = string.encode()
直接以默認的utf-8編碼string爲bytes內存
計算機內存地址和爲何用16進制?
爲何用16進制
一、計算機硬件是0101二進制的,16進制恰好是2的倍數,更容易表達一個命令或者數據。十六進制更簡短,由於換算的時候一位16進制數能夠頂4位2進制數,也就是一個字節(8位進制能夠用兩個16進製表示)
二、最先規定ASCII字符集採用的就是8bit(後期擴展了,可是基礎單位仍是8bit),8bit用2個16進制直接就能表達出來,無論閱讀仍是存儲都比其餘進制要方便
三、計算機中CPU運算也是遵守ASCII字符集,以1六、3二、64的這樣的方式在發展,所以數據交換的時候16進制也顯得更好
四、爲了統一規範,CPU、內存、硬盤咱們看到都是採用的16進制計算
16進制用在哪裏
一、網絡編程,數據交換的時候須要對字節進行解析都是一個byte一個byte的處理,1個byte能夠用0xFF兩個16進制來表達。經過網絡抓包,能夠看到數據是經過16進制傳輸的。
二、數據存儲,存儲到硬件中是0101的方式,存儲到系統中的表達方式都是byte方式
三、一些經常使用值的定義,好比:咱們常常用到的html中color表達,就是用的16進制方式,4個16進制位能夠表達好幾百萬的顏色信息。