python - python中的等效C联合?

标签 python union

假设我在 C 中有以下代码

union u_type
{
    uint32_t data;
    uint8_t  chunk[4];
} 32bitsdata;

32bitsdata.chunk[0] = some number;
32bitsdata.chunk[1] = some number;
32bitsdata.chunk[2] = some number;
32bitsdata.chunk[3] = some number;

printf("Data in 32 bits: %d\n", 32bitsdata.data);

我如何在 python 中做类似的事情?

我正在尝试读取二进制文件(逐字节)- 已经可以正常工作,并将每 3 个字节组合成一个 int。听说 struct 可以解决问题,但我不太确定如何。

最好的,

亨利

最佳答案

ctypes呢? ?

from ctypes import (
        Union, Array, 
        c_uint8, c_uint32, 
        cdll, CDLL
) 

class uint8_array(Array):
    _type_ = c_uint8
    _length_ = 4

class u_type(Union):
    _fields_ = ("data", c_uint32), ("chunk", uint8_array)

# load printf function from Dynamic Linked Libary libc.so.6 (I'm using linux)
libc = CDLL(cdll.LoadLibrary('libc.so.6')._name)
printf = libc.printf

if __name__ == "__main__":
    # initialize union
    _32bitsdata = u_type()
    # set values to chunk
    _32bitsdata.chunk[:] = (1, 2, 3, 4)
    # and print it
    printf(b"Data in 32 bits: %d\n", _32bitsdata.data)

关于python - python中的等效C联合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45383771/

相关文章:

python - 用Python编码有向图的 bool 邻接矩阵

mysql - MySQL 查询中 HAVING 的多个条件

mysql - MySQL UNION 多个表,但只返回 1 个结果,为什么?

python - 在 Keras 中定义二进制掩码

python - 将两个排序列表合并为一个更大的排序列表

mysql - 创建 View 连接两个具有相同列且没有重复的表

sql - Oracle SQL 列使用 UNION ALL 定义不明确

mysql - 将两个SQL结果组合成一行不同列名的结果集

python - 在 RPy 中获取 nlme.lme() 或 lme4.lmer() 的清晰摘要

python - Python 和 PEP8 中的私有(private)属性