struct.pack使用错误的记录

先把struct的fmt列出来:

 

 1、struct.error: bad char in struct format:

tmp = [1,2,3,4,5]
data = struct.pack("<i"*5,*tmp)

 上述代码出现该问题是因为fmt为"<i"*5,即fmt为“<i<i<i<i<i”。如果要设置byte order、size和对齐方式,则需要在字符串开始位置指定。

The optional first format char indicates byte order, size and alignment:
      @: native order, size & alignment (default)
      =: native order, std. size & alignment
      <: little-endian, std. size & alignment
      >: big-endian, std. size & alignment
      !: same as >
    
    The remaining chars indicate types of args and must match exactly;

将上述改为下述代码即可。

data = struct.pack("<"+"i"*5,*tmp)

关于*tmp的用法,主要用来传个数不定的参数,具体用法可参考python *和**的使用

*args 和 **kwargs 主要用于函数定义。
你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。  *(星号) 才是必须的. 你也可以写成 *ar  和 **k 。而写成 *args 和**kwargs 只是一个通俗的命名约定。
python函数传递参数的方式有两种:
位置参数(positional argument)
关键词参数(keyword argument)
*args 与 **kwargs 的区别,两者都是 python 中的可变参数:
*args 表示任何多个无名参数,它本质是一个 tuple
**kwargs 表示关键字参数,它本质上是一个 dict
如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
python的struct模块用于处理C结构化数据的转换和打包。它提供了一种将数据结构转换为字节序列(打包)和将字节序列转换回数据结构(解包)的方法。下面是struct模块的一些常用用法: 1. 打包(pack):将数据结构转换为字节序列。使用`struct.pack(format, v1, v2, ...)`函数,其中format是格式化字符串,v1, v2, ...是要打包的值。例如,`struct.pack('!I', 123)`将整数123打包为一个无符号四字节整数的字节序列。 2. 解包(unpack):将字节序列转换为数据结构。使用`struct.unpack(format, buffer)`函数,其中format是格式化字符串,buffer是要解包的字节序列。例如,`struct.unpack('!I', b'\x00\x00\x00{')`将四字节的字节序列解包为一个无符号整数123。 3. 计算字节大小(calcsize):计算指定格式化字符串的字节大小。使用`struct.calcsize(format)`函数,其中format是格式化字符串。例如,`struct.calcsize('!I')`返回无符号四字节整数的字节大小。 4. 进一步的格式化字符:struct模块支持多种格式化字符,用于表示不同的数据类型和字节顺序。常见的格式化字符包括: - `b`:有符号字节 - `B`:无符号字节 - `h`:有符号短整数 - `H`:无符号短整数 - `i`:有符号整数 - `I`:无符号整数 - `f`:单精度浮点数 - `d`:双精度浮点数 以上是struct模块的基本用法,你可以通过查阅官方文档来了解更多详细信息和示例。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值