国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中struct模塊對字節流/二進制流的操作教程

2020-02-23 04:18:03
字體:
來源:轉載
供稿:網友

前言

最近使用Python解析IDX文件格式的MNIST數據集,需要對二進制文件進行讀取操作,其中我使用的是struct模塊。查了網上挺多教程都寫的挺好的,不過對新手不是很友好,所以我重新整理了一些筆記以供快速上手。

注:教程中以下四個名詞同義:二進制流、二進制數組、字節流、字節數組

快速上手

在struct模塊中,將一個整型數字、浮點型數字或字符流(字符數組)轉換為字節流(字節數組)時,需要使用格式化字符串fmt告訴struct模塊被轉換的對象是什么類型,比如整型數字是'i',浮點型數字是'f',一個ascii碼字符是's'。

def demo1(): # 使用bin_buf = struct.pack(fmt, buf)將buf為二進制數組bin_buf # 使用buf = struct.unpack(fmt, bin_buf)將bin_buf二進制數組反轉換回buf # 整型數 -> 二進制流 buf1 = 256 bin_buf1 = struct.pack('i', buf1) # 'i'代表'integer' ret1 = struct.unpack('i', bin_buf1) print bin_buf1, ' <====> ', ret1 # 浮點數 -> 二進制流 buf2 = 3.1415 bin_buf2 = struct.pack('d', buf2) # 'd'代表'double' ret2 = struct.unpack('d', bin_buf2) print bin_buf2, ' <====> ', ret2 # 字符串 -> 二進制流 buf3 = 'Hello World' bin_buf3 = struct.pack('11s', buf3) # '11s'代表長度為11的'string'字符數組 ret3 = struct.unpack('11s', bin_buf3) print bin_buf3, ' <====> ', ret3 # 結構體 -> 二進制流 # 假設有一個結構體 # struct header { # int buf1; # double buf2; # char buf3[11]; # } bin_buf_all = struct.pack('id11s', buf1, buf2, buf3) ret_all = struct.unpack('id11s', bin_buf_all) print bin_buf_all, ' <====> ', ret_all

輸出結果如下:


demo1輸出結果

詳解struct模塊

主要函數

struct模塊中最重要的三個函數是pack() , unpack() , calcsize()

# 按照給定的格式化字符串,把數據封裝成字符串(實際上是類似于c結構體的字節流)string = struct.pack(fmt, v1, v2, ...)# 按照給定的格式(fmt)解析字節流string,返回解析出來的tupletuple = unpack(fmt, string)# 計算給定的格式(fmt)占用多少字節的內存offset = calcsize(fmt)

struct中的格式化字符串

struct中支持的格式如下表:

<track id="fmcdb"></track>
<noscript id="fmcdb"><tbody id="fmcdb"></tbody></noscript>
    Format C Type Python 字節數
    x pad byte no value 1
    c char string of length 1 1
    b signed char integer 1
    B unsigned char integer 1
    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 息烽县| 阿图什市| 嵊泗县| 阿合奇县| 崇左市| 万宁市| 阿勒泰市| 安顺市| 阿城市| 蕉岭县| 旬邑县| 三都| 泰宁县| 神农架林区| 博乐市| 林芝县| 姚安县| 上虞市| 板桥市| 绵阳市| 漳州市| 诸暨市| 松溪县| 宁陵县| 天全县| 仲巴县| 静安区| 辉南县| 神农架林区| 达日县| 博乐市| 盐边县| 鄯善县| 泽州县| 蒲城县| 闸北区| 盖州市| 同江市| 徐闻县| 鸡泽县| 望江县|
          <td id="fmcdb"><tr id="fmcdb"></tr></td>