如何将位字符串转换为ctypes字节数组?

2024-09-28 05:27:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始使用位字符串和ctypes,我有一部分二进制文件存储在startdata,一个^{}类中。在

> print(startdata)
0x0000000109f0000000010605ffff

现在,我必须按原样将这些数据传递给一个以unsigned char *作为参数的C函数,所以我首先尝试这样做:

^{pr2}$

最后要做到这一点:

buf_ptr = cast(pointer(buf), POINTER(c_ubyte))

这是可行的,但是如何将来自startdata的字节数据分配给我刚刚创建的数组/缓冲区?在

这不起作用:

> buf = (c_ubyte * len(startdata))(*startdata.bytes)
TypeError: an integer is required

Tags: 文件数据函数字符串参数二进制ctypesprint
1条回答
网友
1楼 · 发布于 2024-09-28 05:27:25

下面是一个可能的解决方案(请注意,我使用的是python3):

import ctypes

def bitarray_to_ctypes_byte_buffer(data):
    """Convert a BitArray instance to a ctypes array instance"""
    ba = bytearray(data.bytes)
    ba_len = len(ba)
    buffer = (ctypes.c_uint8 * ba_len).from_buffer(ba)
    return buffer

(注意:将bytes实例转换为ctypes字节数组也是一样,只需删除data.bytes中的.bytes)。在

然后可以使用^{}将缓冲区传递给C函数:

^{pr2}$

相关问题 更多 >

    热门问题