【发布时间】:2023-02-22 05:24:59
【问题描述】:
这是一个cython函数:
cdef struct my_struct_t:
unsigned int a
short b
unsigned char[6] c
cdef void f_my_struct_t(int buff_size, const unsigned char* buf, list output):
cdef:
my_struct_t *arr = <my_struct_t *> buf
list data = []
for i in range(buff_size / sizeof(my_struct_t)):
data.append(arr[i])
output.append({
"type": "my_struct_t",
"data": data
})
该函数接受一个包含结构my_struct_t 的缓冲区参数,并将该结构格式化为 json 格式。
在 C 中,char* 只是一个字节数组。
在 cython 中,它被认为是一个只包含 ASCII 字符的数组。
因此,如果第一个元素是 0x00 别名 '\0',它将字节数组转换为 b''。而如果 char 数组仅包含 0x00,则应将其转换为 b'000000'。
这个函数的当前结果是:
{
'type': 'my_struct_t',
'data': [
{
'a': 1,
'b': 2,
'c': b'' # Byte array should not be null
}
]
}
json.dumps(xxx, indent=4) 如何用空字节数组解析这个字典?目前如果因为这个空的字节数组而失败(或者可能只是因为有一个字节数组?)。
当前错误:TypeError: Object of type bytes is not JSON serializable
如何强制 cython 将 char* 正确转换为字节数组?
【问题讨论】:
标签: python json cython python-bytearray