解压字节编码消息的推荐“pythonic方式”是啥? [复制]

Posted

技术标签:

【中文标题】解压字节编码消息的推荐“pythonic方式”是啥? [复制]【英文标题】:What's the recommended "pythonic way" for unpacking a byte encoded message? [duplicate]解压字节编码消息的推荐“pythonic方式”是什么? [复制] 【发布时间】:2017-04-27 21:20:03 【问题描述】:

假设我有一个带有以下架构的字节打包消息:

Message Name: Ball
    Field #1: 
        Name: Color
        Type: unsigned int
        Start Bit: 0
        Bit Length: 4
    Field #2: 
        Name: Radius
        Type: single
        Start Bit: 4
        Bit Length: 32
    Field #3: 
        Name: New
        Type: bool
        Start Bit: 36
        Bit Length: 1

将字节序列转换为python变量的推荐pythonic方法是什么? “struct”模块能否很好地解压具有任意位长度字段的字节数组?

【问题讨论】:

我怀疑这个问题最终会因某种原因而被关闭,但无论如何为了提供帮助,construct 可能比struct 更适合。 嗯,看看this。 @juanpa.arrivillaga。我认为这是一个完美的例子。我非常熟悉如何在 C 中执行此操作,但我很好奇正确的 python 方法。我喜欢那篇文章中关于使用原生 python 库的参考资料。 @jwodder:谢谢。我会检查一下,但希望使用原生 python 方法。 @Pat 是的,如果你想做一些你会在 C 中做的事情,通常 ctypesstruct 可能需要查看 array 模块。跨度> 【参考方案1】:

推荐的将字节序列转换为python变量的pythonic方法是什么?

这个问题很快就会结束。你想要的是阅读this python doc page about struct and bytearrays。

它将向您展示如何使用格式来处理packunpack 数据。

“struct”模块能否很好地解压具有任意位长度字段的字节数组?

它将向您展示如何使用格式来处理packunpack 数据。

是的,如下:

import struct
color, radius, new = struct.unpack("If?", incoming_bytes)

检查format characters 以定义格式字符串,您就完成了。

您可以使用更多臃肿的库,例如construct,但TBH,这种格式非常简单,如果您早点unpack 和晚点pack,您可以在代码中随意组织数据。

例如:

class Ball:
    def __init__(self, color, radius, new):
        self.color = color
        self.radius = radius
        self.new = new

Ball(*unpack("If?", incoming_bytes))

【讨论】:

以上是关于解压字节编码消息的推荐“pythonic方式”是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

以块为单位迭代列表的最“pythonic”方式是啥?

实现具有自动递增实例属性的类的最 Pythonic 方式是啥?

将 0 和 1 字符串转换为布尔值的最 Pythonic 方式是啥? [复制]

Pandas 获得与 SQL 语句相同结果的 Pythonic 方式是啥:“UPDATE-LEFT JOIN - SET - WHERE”?

返回布尔值和消息的Pythonic方式[重复]

为这些类型的字节级操作进行 java 编码的最佳方法是啥?