最近學習了python的網路程式設計,網路程式設計用到的作業系統知識很多,還是很有必要先把作業系統必要知識複習一遍了,雖然我系統的學過一次但是還是太久沒看了忘記了,記下來就讓我們講一下struct吧:
1:按照指定格式將python資料轉換為字串,該字串為位元組流,如網路傳輸時,不能傳輸int,此時先將int轉化為位元組流,然後再傳送;
2:按照指定格式將位元組流轉換為python指定的資料型別;
3:處理二進位制資料,如果用struct來處理檔案的話,需要用』wb』,』rb』以二進位制(位元組流)寫,讀的方式來處理檔案;
4:他還可以處理c語言中的結構體;
1:pack(fmt,v1,v2…):按照給定的格式(fmt),把資料轉換成字串(位元組流),並將該字串返回.;返回值型別: string
2:pack_into(fmt,buffer,offset,v1,v2…):按照給定的格式(fmt),將資料轉換成字串(位元組流),並將位元組流寫入以offset開始的buffer中.(buffer為可寫的緩衝區,可用array模組);返回值型別:none
3:unpack(fmt,v1,v2……):按照給定的格式(fmt)解析位元組流,並返回解析結果;;返回值型別: tuple
4:pack_from(fmt,buffer,offset):按照給定的格式(fmt)解析以offset開始的緩衝區,並返回解析結果;返回值型別:tuple
5:calcsize(fmt) :計算給定的格式(fmt)占用多少位元組的記憶體,注意對齊方式;返回值型別:size of fmt
當打包或者解包的時,需要按照特定的方式來打包或者解包.該方式就是格式化字串,它指定了資料型別,除此之外,還有用於控制位元組順序、大小和對齊方式的特殊字元.
import struct
#編碼res=struct.pack(
'i',1230)
print(res,type(res),len(res))
# client.recv(4)#
#反解obj=struct.unpack(
'i',res)
print(obj[0]
)
**結果:
但是,但是來了:
import struct
#編碼,當這個長度超出一定的範圍就會報錯
這時就說明了,編碼struct對編碼長度有限制
此時我們只需要把i型別換成l長整形就可以了,可以一定範圍內延遲編碼長度,但是她也不是無限延長的,他也有一定的範圍
res1=struct.pack(
'i',1230000000)
====》
res1=struct.pack(
'l',1230000000)
解決上面的長度問題:
import struct
import json
# 解決上面的長度問題:
header_dic=
header_json=json.dumps(header_dic)
print(type(header_json))
header_bytes=header_json.encode(
'utf-8'
)print(type(header_bytes))
print(len(header_bytes))
struct.pack(
'i',len(header_bytes))
這樣不管之後你的**長度是多少都不會出現超長的現象了,都轉換為固定長度,方便使用
搞定!!!
這部分的我只是簡單說了一下我用到的部分知識點。
一步一步提公升,穩贏!!!
python內建模組之struct
1.python提供了乙個struct模組來解決bytes和其他二進位制資料型別的轉換。struct的pack函式把任意資料型別變成bytes import struct print struct.pack i 10240099 執行結果 c program files python36 pytho...
python之struct 模組詳解
準確地講,python沒有專門處理位元組的資料型別。但由於b str 可以表示位元組,所以,位元組陣列 二進位制str。而在c語言中,我們可以很方便地用struct 結構體 union來處理位元組,以及位元組和int,float的轉換。在python中,比方說要把乙個32位無符號整數變成位元組,也就...
Python標準庫 struct模組
將位元組打包為二進位制資料。struct模組負責python bytes物件在python value及c struct之間的轉換。可以處理檔案二進位制資料 網路連線資料流或是其他源資料。它使用 format strings作為c結構布局的簡潔描述以及與python值的預期轉換。第乙個format ...