如何将BitString转换为ctypes字节数组
How can I convert a BitString to a ctypes Byte Array?
我刚开始使用BitString和ctypes,并且我有一部分二进制文件存储在startdata
,一个BitArray
类中。
> print(startdata)
0x0000000109f0000000010605ffff
现在,我必须将这些数据按原样传递给一个以unsigned char *
为参数的C函数,所以我首先尝试这样做:
buf = (c_ubyte * len(startdata))()
最终做到这一点:
buf_ptr = cast(pointer(buf), POINTER(c_ubyte))
这是可行的,但我如何将startdata
中的字节数据分配给我刚刚创建的数组/缓冲区?
这不起作用:
> buf = (c_ubyte * len(startdata))(*startdata.bytes)
TypeError: an integer is required
这里有一个可能的解决方案(注意我使用的是python 3):
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
)。
然后,您可以使用byref
:将缓冲区传递给C函数
byref(buffer)
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 在UNIX系统中使用DIR查找文件的字节大小
- Ctypes wstring通过引用传递
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- std::当在256字节边界上写入整数时,流的奇怪行为
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 当比特(而不是字节)的顺序至关重要时的持久性
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 如何在文件中查找字节序列
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 字节到位运算符重载C++
- 在java中读取c++字节的位字段
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用 std::vector::reverse_iterator 将 int 序列化为字节向量?
- Python ctypes:不会按预期加载 dll
- 字节真的是最小可寻址单元吗
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 调用c++库时,如何在Python中使用ctypes传递字节作为引用
- 如何将BitString转换为ctypes字节数组