欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Python的struct模塊中進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換的方法

 更新時(shí)間:2015年06月17日 12:09:59   作者:Darkbull  
這篇文章主要介紹了在Python的struct模塊中進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換的方法,文中還給出了C語(yǔ)言和Python語(yǔ)言的數(shù)據(jù)類型比較,需要的朋友可以參考下

Python是一門(mén)非常簡(jiǎn)潔的語(yǔ)言,對(duì)于數(shù)據(jù)類型的表示,不像其他語(yǔ)言預(yù)定義了許多類型(如:在C#中,光整型就定義了8種),它只定義了六種基本類型:字符串,整數(shù),浮點(diǎn)數(shù),元組,列表,字典。通過(guò)這六種數(shù)據(jù)類型,我們可以完成大部分工作。但當(dāng)Python需要通過(guò)網(wǎng)絡(luò)與其他的平臺(tái)進(jìn)行交互的時(shí)候,必須考慮到將這些數(shù)據(jù)類型與其他平臺(tái)或語(yǔ)言之間的類型進(jìn)行互相轉(zhuǎn)換問(wèn)題。打個(gè)比方:C++寫(xiě)的客戶端發(fā)送一個(gè)int型(4字節(jié))變量的數(shù)據(jù)到Python寫(xiě)的服務(wù)器,Python接收到表示這個(gè)整數(shù)的4個(gè)字節(jié)數(shù)據(jù),怎么解析成Python認(rèn)識(shí)的整數(shù)呢? Python的標(biāo)準(zhǔn)模塊struct就用來(lái)解決這個(gè)問(wèn)題。

struct模塊的內(nèi)容不多,也不是太難,下面對(duì)其中最常用的方法進(jìn)行介紹:
 struct.pack

struct.pack用于將Python的值根據(jù)格式符,轉(zhuǎn)換為字符串(因?yàn)镻ython中沒(méi)有字節(jié)(Byte)類型,可以把這里的字符串理解為字節(jié)流,或字節(jié)數(shù)組)。其函數(shù)原型為:struct.pack(fmt, v1, v2, …),參數(shù)fmt是格式字符串。v1, v2, …表示要轉(zhuǎn)換的python值。下面的例子將兩個(gè)整數(shù)轉(zhuǎn)換為字符串(字節(jié)流):
 

import struct
 
a = 20
b = 400
 
str = struct.pack("ii", a, b) 
#轉(zhuǎn)換后的str雖然是字符串類型,但相當(dāng)于其他語(yǔ)言中的字節(jié)流(字節(jié)數(shù)組),可以在網(wǎng)絡(luò)上傳輸
print 'length:', len(str)
print str
print repr(str)
 
#---- result
#length: 8
#  ----這里是亂碼
#'/x14/x00/x00/x00/x90/x01/x00/x00'

格式符”i”表示轉(zhuǎn)換為int,'ii'表示有兩個(gè)int變量。進(jìn)行轉(zhuǎn)換后的結(jié)果長(zhǎng)度為8個(gè)字節(jié)(int類型占用4個(gè)字節(jié),兩個(gè)int為8個(gè)字節(jié)),可以看到輸出的結(jié)果是亂碼,因?yàn)榻Y(jié)果是二進(jìn)制數(shù)據(jù),所以顯示為亂碼??梢允褂胮ython的內(nèi)置函數(shù)repr來(lái)獲取可識(shí)別的字符串,其中十六進(jìn)制的0×00000014, 0×00001009分別表示20和400。
struct.unpack

struct.unpack做的工作剛好與struct.pack相反,用于將字節(jié)流轉(zhuǎn)換成python數(shù)據(jù)類型。它的函數(shù)原型為:struct.unpack(fmt, string),該函數(shù)返回一個(gè)元組。 下面是一個(gè)簡(jiǎn)單的例子:
 

str = struct.pack("ii", 20, 400)
a1, a2 = struct.unpack("ii", str)
print 'a1:', a1
print 'a2:', a2
 
#---- result:
#a1: 20
#a2: 400
struct.calcsize

struct.calcsize用于計(jì)算格式字符串所對(duì)應(yīng)的結(jié)果的長(zhǎng)度,如:struct.calcsize(‘ii'),返回8。因?yàn)閮蓚€(gè)int類型所占用的長(zhǎng)度是8個(gè)字節(jié)。
struct.pack_into, struct.unpack_from

這兩個(gè)函數(shù)在Python手冊(cè)中有所介紹,但沒(méi)有給出如何使用的例子。其實(shí)它們?cè)趯?shí)際應(yīng)用中用的并不多。Google了很久,才找到一個(gè)例子,貼出來(lái)共享一下:
 

import struct
from ctypes import create_string_buffer
 
buf = create_string_buffer(12)
print repr(buf.raw)
 
struct.pack_into("iii", buf, 0, 1, 2, -1)
print repr(buf.raw)
 
print struct.unpack_from('iii', buf, 0)
 
#---- result
#'/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00'
#'/x01/x00/x00/x00/x02/x00/x00/x00/xff/xff/xff/xff'
#(1, 2, -1)

關(guān)于格式字符串

在Python手冊(cè)中,給出了C語(yǔ)言中常用類型與Python類型對(duì)應(yīng)的格式符:

2015617120927187.jpg (645×656)

具體內(nèi)容請(qǐng)參考Python手冊(cè)struct 模塊

相關(guān)文章

  • python中路徑的三種寫(xiě)法+路徑前符號(hào)含義解讀

    python中路徑的三種寫(xiě)法+路徑前符號(hào)含義解讀

    這篇文章主要介紹了python中路徑的三種寫(xiě)法+路徑前符號(hào)含義解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • python之js逆向功能演示詳解

    python之js逆向功能演示詳解

    這篇文章主要為大家介紹了python之js逆向功能演示詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • python 實(shí)現(xiàn)在txt指定行追加文本的方法

    python 實(shí)現(xiàn)在txt指定行追加文本的方法

    下面小編就為大家分享一篇python 實(shí)現(xiàn)在txt指定行追加文本的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • python Pandas中數(shù)據(jù)的合并與分組聚合

    python Pandas中數(shù)據(jù)的合并與分組聚合

    大家好,本篇文章主要講的是python Pandas中數(shù)據(jù)的合并與分組聚合,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 520使用Python實(shí)現(xiàn)“我愛(ài)你”表白

    520使用Python實(shí)現(xiàn)“我愛(ài)你”表白

    這篇文章主要介紹了520使用Python實(shí)現(xiàn)“我愛(ài)你”表白,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • python如何編寫(xiě)類似nmap的掃描工具

    python如何編寫(xiě)類似nmap的掃描工具

    這篇文章主要介紹了python如何編寫(xiě)類似nmap的掃描工具,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python判斷是否json是否包含一個(gè)key的方法

    Python判斷是否json是否包含一個(gè)key的方法

    今天小編就為大家分享一篇Python判斷是否json是否包含一個(gè)key的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • 使用PyCharm進(jìn)行遠(yuǎn)程開(kāi)發(fā)和調(diào)試的實(shí)現(xiàn)

    使用PyCharm進(jìn)行遠(yuǎn)程開(kāi)發(fā)和調(diào)試的實(shí)現(xiàn)

    這篇文章主要介紹了使用PyCharm進(jìn)行遠(yuǎn)程開(kāi)發(fā)和調(diào)試的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • python實(shí)現(xiàn)超市掃碼儀計(jì)費(fèi)

    python實(shí)現(xiàn)超市掃碼儀計(jì)費(fèi)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)超市掃碼儀計(jì)費(fèi),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Python通用驗(yàn)證碼識(shí)別OCR庫(kù)ddddocr的安裝使用教程

    Python通用驗(yàn)證碼識(shí)別OCR庫(kù)ddddocr的安裝使用教程

    dddd_ocr是一個(gè)用于識(shí)別驗(yàn)證碼的開(kāi)源庫(kù),又名帶帶弟弟ocr,下面這篇文章主要給大家介紹了關(guān)于Python通用驗(yàn)證碼識(shí)別OCR庫(kù)ddddocr的安裝使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07

最新評(píng)論