python byte類型與int、str類型轉(zhuǎn)換

bytes類型解釋

python中的bytes類型可以類比為C中的uint8型數(shù)組,本質(zhì)就是順序排列的8bit二進(jìn)制數(shù)字褥符,例如以二進(jìn)制方式從文件中讀取時(shí)返回的就是bytes類型,或以b前綴的字符串也是bytes類型韭寸,如

 a = b'abcd'
print(type(a))

返回<class 'bytes'>

bytes類型與ascii碼春哨、str類型區(qū)別

bytes類型非常容易和ascii碼以及str類型混淆,我也中間被繞暈幾次恩伺,現(xiàn)在整理如下

  • bytes類型和ascii碼
import sys

b = b'\x61\x62\x63\x64'  #代表兩個(gè)beyte的16進(jìn)制數(shù)字赴背,分別是0x61 0x62 0x63 0x64 即97~100
b = b'abcd'       #代表abcd的ascii碼對(duì)應(yīng)的4個(gè)1byte數(shù)字,分別是97晶渠、98凰荚、99、100
for i in b:
    print(b)    # 97 98 99 100

print(a==b)  #True

bytes只是一個(gè)8bit數(shù)字為一個(gè)單位元素的數(shù)組褒脯,而ascii是解析這樣一個(gè)數(shù)字?jǐn)?shù)組的解碼方式便瑟,類似的還有utf-8等

  • bytes類型與str類型

b = b'abcd'
print(b[0])        #97
print(int(b[0])    #97

s = 'abcd'      #并不代表內(nèi)存中是按abcd的ascii碼存儲(chǔ)的!str實(shí)際是一個(gè)對(duì)象而不是一個(gè)簡(jiǎn)單數(shù)組
print(int(s[0]))    #error 因?yàn)閟tr類型的每個(gè)元素不是一個(gè)簡(jiǎn)單數(shù)字憨颠!

str是一個(gè)對(duì)象類型胳徽,不是C中的字符串概念,無法直接強(qiáng)轉(zhuǎn)為數(shù)字

bytes類型就是最基本的"code"爽彤,即連續(xù)的二進(jìn)制數(shù)字养盗,而對(duì)bytes類型做不同的”解釋“, 按照ascii碼解析得到了str,按照utf-8解析适篙,可以得到更多字符表示

bytes類型的解析

bytes類型的解析可以分為兩類往核,一類是解析為數(shù)字類型,一類是解析為文本

bytes解析為數(shù)字

主要分為解析為 UINT8嚷节、UINT16聂儒、UINT32、UINT64等數(shù)字類型硫痰,即分別對(duì)應(yīng)將每1衩婚、2、4效斑、8個(gè)字節(jié)放一起解釋為一個(gè)數(shù)字非春,這其中對(duì)于多于一個(gè)字節(jié)的情況又分大小端處理
推薦使用自帶的struct庫解析,方法比較通用

  • 用法
    strcut.unpack(fmt, byte)
    其中fmt為格式化字符串缓屠,分為兩部分奇昙,開頭控制大小端,后面通過字符控制數(shù)字類型敌完,常用如下
fmt 含義
i 大端序储耐,和>相同
> 大端序
< 小端序
B uint8類型
b int8類型
H uint16類型
h int16類型
I uint32類型
i int32類型
L uint64類型
l int64類型
s ascii碼,s前帶數(shù)字表示個(gè)數(shù)

更多詳細(xì)fmt的用法可用help(strcut)

  • 例子
import struct

m = b'\x01\x01\x02\x01\x02\x03\x04' #7個(gè)字節(jié)
a=struct.unpack('!BHI', m) 

for i in a:
    print(hex(i)) # 0x1 0x102 0x1020304

bytes解析為文本

文本最終是屬于某一種字符集的滨溉,ascii碼是一種最常見的字符集什湘,而為了表示漢字等還有utf-8以及unicode等字符集长赞,從bytes解析到文本常用兩種方法

  • decode方法(通用)

b = b'\x61\x62'
b2=b'\xe4\xbd\xa0\xe5\xa5\xbd'

print(b.decode('ascii'))  #a b
print(b2.decode('utf-8')) #你好

errb = b'\x80\x61'
print(errb.decode('ascii'))  #error! 0x80不是ascii字符集的元素禽炬!

bytes類型自帶的decode方法即可涧卵,入?yún)⒅付ń馕鲎址械臅r(shí)候bytes流中可能包含不止一種字符集的數(shù)字腹尖,此時(shí)解析就會(huì)有問題,如解析報(bào)文流的時(shí)候

  • struct方法(解析ascii)
import struct
b= b'\x80\x61'

m=struct.unpack('!B1s', b)
for i in m:
    print(m) # 0x80, b'a'

print(m[1].decode())

通過s前指定數(shù)字來限定解析為ascii的byte范圍伐脖,這樣就對(duì)bytes中混合代表數(shù)字和代表ascii的字節(jié)做分別解析了

注意热幔,strcut的s解析出認(rèn)為bytes類型,需要進(jìn)一步decode解析為str類型

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末讼庇,一起剝皮案震驚了整個(gè)濱河市绎巨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蠕啄,老刑警劉巖场勤,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異歼跟,居然都是意外死亡和媳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門哈街,熙熙樓的掌柜王于貴愁眉苦臉地迎上來留瞳,“玉大人,你說我怎么就攤上這事骚秦∷龋” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵作箍,是天一觀的道長硬梁。 經(jīng)常有香客問我,道長胞得,這世上最難降的妖魔是什么荧止? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮懒震,結(jié)果婚禮上罩息,老公的妹妹穿的比我還像新娘。我一直安慰自己个扰,他們只是感情好瓷炮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著递宅,像睡著了一般娘香。 火紅的嫁衣襯著肌膚如雪苍狰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天烘绽,我揣著相機(jī)與錄音淋昭,去河邊找鬼。 笑死安接,一個(gè)胖子當(dāng)著我的面吹牛红伦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播趴俘,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼芯咧,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了胡野?” 一聲冷哼從身側(cè)響起材失,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎硫豆,沒想到半個(gè)月后龙巨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡熊响,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年旨别,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耘眨。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昼榛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出剔难,到底是詐尸還是另有隱情胆屿,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布偶宫,位于F島的核電站非迹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏纯趋。R本人自食惡果不足惜憎兽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吵冒。 院中可真熱鬧纯命,春花似錦、人聲如沸痹栖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揪阿。三九已至疗我,卻和暖如春咆畏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吴裤。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國打工旧找, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人麦牺。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓钮蛛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親剖膳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子愿卒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容