【发布时间】:2021-04-03 21:55:12
【问题描述】:
我有一些数据缓冲区,PyByteArray,我想从中提取 char *。然后我想获取该 char* 并从中创建一个字符串流。
void CKKSwrapper::DeserializeContext(PyObject *obj) {
// Is a PyByteArray object as determined by https://docs.python.org/3/c-api/bytearray.html#c.PyByteArray_Check
PyObject_Print(obj, stdout, Py_PRINT_RAW); // 1
const char *s = PyByteArray_AsString(obj); // 2
std::cout << "Converted bytearray to string" << std::endl; // 3
std::cout << s << std::endl; // 4
std::istringstream is(s); // 5
lbcrypto::CryptoContext<lbcrypto::DCRTPoly> new_cc; // 6
Serial::Deserialize(new_cc, is, SerType::BINARY); // 7
}
第二行const char *s = PyByteArray_AsString(obj); 输出一个字符。从上一个问题C++ c_str of std::string returns empty(标题不准确)中,我知道输入对象PyObject *obj 的基础数据中有NULL 字符。
基于API,我没有看到任何直接的解决方案。有人有什么建议吗?
注意:我需要从当前的代码库中去
Server: (C++ -> Python) -> (sockets) -> Client: (Python -> C++)
所以我无法真正绕过 PyObject。
【问题讨论】: