Struct库的使用

Struct库的使用

Struct库相关介绍
  Struct库可以作为Python中序列化与反序列化的库来使用,关键在于掌握如何定义格式字符串,以此得到Python的字节对象。
  Struct中常用的函数如下:
  pack(fmt, v1, v2, …) —— 根据所给的fmt描述的格式将值v1,v2,…转换为一个字符串。
  unpack(fmt, bytes) —— 根据所给的fmt描述的格式将bytes反向解析出来,返回一个元组。
  calcsize(fmt) —— 根据所给的fmt描述的格式返回该结构的大小。
  格式(fmt)的参照表如下:
  这里写图片描述

Struct库使用代码示例
(1)简单数据类型的例子

import struct

if "__main__" == __name__:
    i = 5
    f = 5.0
    d1 = 5.0
    d2 = 5.0
    b = True
    s = "abc"
    fmt = "if2d?3s" # 1-int 1-float 2-double 1-bool 1-char[]
    pack_data = struct.pack(fmt, i, f, d1, d2, b, s)
    un_i, un_f, un_d1, un_d2, un_b, un_s = struct.unpack(fmt, pack_data)
    print ("Source data:", i, f, d1, d2, b, s)
    print ("Destination data:", un_i, un_f, un_d1, un_d2, un_b, un_s)

  上例中可以依次序列化和反序列化1个int,1个float,2个double,1个bool和1个char[]类型

(2)数组类型数组的例子

import struct
import numpy as np

if "__main__" == __name__:
    array = np.array([[1, 2, 3], [4, 5, 6]])
    temp_array = array.reshape(-1)
    larray = temp_array.tolist()
    fmt = "%di"%(len(larray))
    pack_data = struct.pack(fmt, *larray)
    unpack_data = struct.unpack(fmt, pack_data)
    dst_array = np.array(unpack_data)
    dst_array = dst_array.reshape(array.shape)
    print("Source Array:", array)
    print("Destination Array:", dst_array)

  上例则显示了如何对一个数组进行pack和unpack,由于没有办法直接对大于等于2维的数组进行pack,因此均需要将大于等于2维的数组变成1维的数组,然后进行pack,在pack的时候注意其中的语法加入了“*”,这也是保证能够对1维数组直接pack的关键。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值