久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    Python模塊學習:struct 數據格式轉換

     imelee 2017-03-18
    原文出處: Darkbull   

    Python是一門非常簡潔的語言,對于數據類型的表示,不像其他語言預定義了許多類型(如:在C#中,光整型就定義了8種),它只定義了六種基本類型:字符串,整數,浮點數,元組,列表,字典。通過這六種數據類型,我們可以完成大部分工作。但當Python需要通過網絡與其他的平臺進行交互的時候,必須考慮到將這些數據類型與其他平臺或語言之間的類型進行互相轉換問題。打個比方:C++寫的客戶端發送一個int型(4字節)變量的數據到Python寫的服務器,Python接收到表示這個整數的4個字節數據,怎么解析成Python認識的整數呢? Python的標準模塊struct就用來解決這個問題。

    struct模塊的內容不多,也不是太難,下面對其中最常用的方法進行介紹:

     struct.pack

    struct.pack用于將Python的值根據格式符,轉換為字符串(因為Python中沒有字節(Byte)類型,可以把這里的字符串理解為字節流,或字節數組)。其函數原型為:struct.pack(fmt, v1, v2, …),參數fmt是格式字符串,關于格式字符串的相關信息在下面有所介紹。v1, v2, …表示要轉換的python值。下面的例子將兩個整數轉換為字符串(字節流):

    Python
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import struct
    a = 20
    b = 400
    str = struct.pack("ii", a, b)  #轉換后的str雖然是字符串類型,但相當于其他語言中的字節流(字節數組),可以在網絡上傳輸
    print 'length:', len(str)
    print str
    print repr(str)
    #---- result
    #length: 8
    #    ----這里是亂碼
    #'/x14/x00/x00/x00/x90/x01/x00/x00'

    格式符”i”表示轉換為int,’ii’表示有兩個int變量。進行轉換后的結果長度為8個字節(int類型占用4個字節,兩個int為8個字節),可以看到輸出的結果是亂碼,因為結果是二進制數據,所以顯示為亂碼。可以使用python的內置函數repr來獲取可識別的字符串,其中十六進制的0x00000014, 0x00001009分別表示20和400。

    struct.unpack

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

    Python
    1
    2
    3
    4
    5
    6
    7
    8
    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用于計算格式字符串所對應的結果的長度,如:struct.calcsize(‘ii’),返回8。因為兩個int類型所占用的長度是8個字節。

    struct.pack_into, struct.unpack_from

    這兩個函數在Python手冊中有所介紹,但沒有給出如何使用的例子。其實它們在實際應用中用的并不多。Google了很久,才找到一個例子,貼出來共享一下:

    Python
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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)

    關于格式字符串

    在Python手冊中,給出了C語言中常用類型與Python類型對應的格式符:

    格式符 C語言類型 Python類型
    x pad byte no value
    c char string of length 1
    b signed char integer
    B unsigned char integer
    _Bool bool
    h short integer
    H unsigned short integer
    i int integer
    I unsigned int integer or long
    l long integer
    L unsigned long long
    q long long long
    Q unsigned long long long
    f float float
    d double float
    s char[] string
    p char[] string
    P void * long

    具體內容請參考Python手冊 struct 模塊

    1 贊 1 收藏 評論

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 性男女做视频观看网站 | 天堂久久久久VA久久久久| 婷婷综合久久中文字幕| 国内精品自线在拍| 一級特黃色毛片免費看| 成人久久免费网站| 久久超碰色中文字幕超清| 国产乱妇无码大片在线观看| 最新偷拍一区二区三区| 12裸体自慰免费观看网站| 中文字幕亚洲国产精品| 国产特级毛片AAAAAA视频| 亚洲精品综合网二三区| 亚洲综合色婷婷在线观看 | 国产丰满美女A级毛片| 青青草无码免费一二三区| 亚洲欧美日韩精品久久亚洲区| 2019久久久高清日本道| 天天在线看无码AV片| 午夜免费无码福利视频麻豆| 少妇愉情理伦片丰满丰满午夜| 成年女人碰碰碰视频播放| √天堂中文www官网在线| 免费看女人与善牲交| 日韩在线观看精品亚洲| 麻豆蜜桃AV蜜臀AV色欲AV| 麻豆国产AV剧情偷闻女邻居内裤 | 无码国产69精品久久久久孕妇| 成年福利片在线观看| 成人午夜激情在线观看| 国产成人手机高清在线观看网站| 国厂精品114福利电影免费| 波多野结衣在线精品视频| 精品剧情V国产在线观看| 亚洲欧美日韩成人综合一区| 久久久无码精品亚洲日韩按摩 | 亚洲男女羞羞无遮挡久久丫| 无码人妻一区二区免费AV| 精品无码一区二区三区电影| 老色鬼在线精品视频| 94人妻少妇偷人精品|