假设我在 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/