1. 程式人生 > 實用技巧 >20201230-3 bytes資料型別

20201230-3 bytes資料型別


一、bytes型別
Python 3最重要的新特性大概要算是對文字和二進位制資料作了更為清晰的區分。
文字總是Unicode,由str型別表示,二i制資料則由bytes型別表示。
Python 3不會以任意隱式的方式混用str和bytes,正是這使得兩者的區分特別清晰。
你不能拼接字串和位元組包,也無法在位元組包裡搜尋字串(反之亦然) ,
也不能將字串傳入引數為位元組包的函式(反之亦然) 。這是件好事。 位元組:可以理解為 2進位制 資料型別 在 Python 中有一個 位元組資料型別,叫 bytes型別,這個和字串是兩回事 二進位制都統一叫 bytes 同一句話之間,字元編碼,不同的編碼之間可以轉換 string → encode編碼 → bytes → decode解碼 → string 二進位制 decode 轉換成字串 什麼場景下,字串 必須轉換成 二進位制? Python3 中的資料傳輸 都是 二進位制的形式
>>>'€20'.encode('utf-8') b'\xe2\x82\xac20' >>> b'\xe2\x82\xac20'.decode('utf-8')'€20' encode 的時候,一定要寫上,之前的樣子,因為它自己不知道,比如之前是 utf-8 b 開頭的 就是 二進位制的 byte 型別 decode 就轉換回來了 msg = "我愛北京天安門" print(msg) # print(msg.encode()) 如果沒有指定編碼,就轉成預設的編碼格式;這地方沒出錯,是因為 windows 的預設編碼 就是 utf-8 這段程式碼 如果放在 linux 上,可能就報錯了
print(msg.encode(encoding="utf-8")) print(msg.encode(encoding="utf-8").decode(encoding="utf-8")) 這就是把一個字串 轉換成 位元 byte 型別,然後在轉換回來 二、三元運算 result = 值1 if 條件 else 值2: 如果條件為真:result = 值1 如果條件為假:result = 值2 三、進位制 • 二進位制,0 1 • 八進位制,01234567 • 十進位制,0123456789 • 十六進位制,0123456789ABCDEF 二進位制到 16 進位制轉換http:/jingyan.baidu.com/album/47a29124292608c0142399b.html?picindex=1 a,b,c
= 1,3,5 d = a if a >b else c 如果 a >b 結果就是 a; 如果 a 不大於 b 結果就是 c >>> d = a if a<b else c >>> d 1 >>> 這就叫三元對映 如果不用三元對映,只能這樣寫;就會變得比較麻煩 >>> if a >b: d = a ... else:d=c 二進位制與十六進位制數之間的對應關係表 16進位制與二進位制對應關係 0 1 2 3 4 0000 0001 0010 0011 0100 5 6 7 8 9 0101 0110 0111 1000 1001 A B C D E F 1010 1011 1100 1101 1110 1111 二進位制轉換成十六進位制的方法是,取四合一法,即從二進位制的小數點為分界點,向左(或向右)每四位取成一位。 1011 1001 1011. 1001 每四位表示一個 16 位 組分好後,對照二進位制與十六進位制數的對應表,將四位二進位制按權相加,得到的數就是一位十六進位制數,
然後按順序排列,小數點的位置不變哦,最後得到的就是十六進位制數哦。
1011 1001 1011. 1001 B 9 B 9 注意 16 進位制的表示法,用字母 H 字尾表示,比如 BH 就表示 16 進位制數 11; 也可以用 0X 字首表示,比如 0X23 就是 16 進位制的 23 BH H 字尾 0X53 0X 字首 在向左(或向右)取四位時,取到最高位(最低位)如果無法湊足四位,就可以在小數點的最左邊(或最右邊)補0,進行換算 10111.011 1 0111 .011 ↓ ↓ ↓ 0001 0111 0110 ↓ ↓ ↓ 1 7 6