博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python struct.pack() 二进制文件,文件中打包二进制数据的存储与解析
阅读量:6036 次
发布时间:2019-06-20

本文共 1164 字,大约阅读时间需要 3 分钟。

  学习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

  

  

转载于:https://www.cnblogs.com/dijun/p/8047468.html

你可能感兴趣的文章
JMJS系统总结系列----Jquery分页扩展库(五)
查看>>
Excel技巧之——英文大小写转换(转)
查看>>
Google 翻译的妙用
查看>>
算法导论--python--插入排序
查看>>
Hydra用户手册
查看>>
常用的集合
查看>>
Unity3D工程源码目录
查看>>
杀死进程命令
查看>>
cookie 和session 的区别详解
查看>>
浮点数网络传输
查看>>
Mongodb对集合(表)和数据的CRUD操作
查看>>
面向对象类的解析
查看>>
tomcat如何修改发布目录
查看>>
CentOS 5.5 使用 EPEL 和 RPMForge 软件库
查看>>
Damien Katz弃Apache CouchDB,继以Couchbase Server
查看>>
Target runtime Apache Tomcat is not defined.错误解决方法
查看>>
某机字长为32位,存储容量为64MB,若按字节编址.它的寻址范围是多少?
查看>>
VC++ 监视文件(夹)
查看>>
【转】keyCode对照表及JS监听组合按键
查看>>
[Java开发之路](14)反射机制
查看>>