python struct.pack() 二进制文件,文件中打包二进制数据的存储与解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python struct.pack() 二进制文件,文件中打包二进制数据的存储与解析相关的知识,希望对你有一定的参考价值。

  学习Python的过程中,遇到一个问题,在《Python学习手册》(也就是《learning python》)中,元组、文件及其他章节里,关于处理二进制文件里,有这么一段代码的处理:

  >>>F=open(‘data.bin‘,‘wb‘)

  >>>import struct

  >>>data=struct.pack(‘i4sh‘,7,‘spam‘,8)

  >>>data

  b‘\x00\x00\x00\x07spam\x00\x08‘

  >>>F.write(data)\

  >>>F.close()

  实际上,无论是在python 2.x 或 3.x中,执行第三步data=struct,pack(...)时,输出会报错,报错:

Traceback (most recent call last):

  File "<pyshell#3>", line 1, in <module>

  data=struct.pack(‘>i4sh‘,7,‘spam‘,8)
  struct.error: argument for ‘s‘ must be a bytes object

  查看帮助文档,可以看到介绍:

ructstruct.pack(fmt, v1, v2, ...)

  Return a bytes object containing the values v1, v2, ? packed according to the format string fmt. The arguments must match the values required by the format exactly.

  格式化字符串的值再Python中的类型是bytes类型,所以我们需要做处理。→在bytes类型前面加上一个b可以解决这个问题。

  >>>data=struct,pack(‘>i4sh‘,7,b‘spam‘,8)

b‘\x00\x00\x00\x07spam\x00\x08‘

  到此问题解决!

  struct.pack(fmt,v1,v2..),fmt是一种Linux命令,功能是编排文本文件。具体操作,此处不做过多记录。

  #  按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流)

  顺便再做下‘>i4sh’的介绍,它在C数据结构和Python中的数据结构:

  i-->int-->integer--->7

  4s-->char-->string--->‘spam‘

  h-->unsigned short-->integer-->8

  

  


以上是关于python struct.pack() 二进制文件,文件中打包二进制数据的存储与解析的主要内容,如果未能解决你的问题,请参考以下文章

请问python struct.pack(">BBHB", 0x1B,)使用,讲解,

qt中如何解包利用python 的struct.pack()函数打包的数据

struct

Python学习笔记__12.4章 struct

使用“struct.pack”将数据写入文件时出错

python3 利用struct.pack 动态组建字节流