我目前正在编写一些利用 # A tibble: 6 x 4
# Groups: trial [2]
trial marker n prop
<chr> <chr> <int> <dbl>
1 ES1-7 0 873 0.268+(0.0826/2)
2 ES1-7 1 269 0.0826
3 ES1-7 2 2114 0.649+(0.0826/2)
4 ES14-25 0 2300 0.258+(0.0753/2)
5 ES14-25 1 673 0.0753
6 ES14-25 2 5959 0.667+(0.0753/2)
的代码。我想将boost.python
转换为类似Python字节的对象,(我只需要将数据公开给Python)。我写的转换器看起来像这样
std::vector<unsigned char>
但是,当我尝试使用#include <Python.h>
#include <boost/python.hpp>
#include <boost/python/module.hpp>
#include <stdio.h>
#include <iostream>
#include <vector>
struct vector_to_bytes{
static PyObject* convert(std::vector<unsigned char> const &vec){
std::printf("Converter Called\n");
const unsigned char * p=&vec[0];
for (char c:vec){
std::printf("%x",c);
}
std::printf("\n");
return PyMemoryView_FromMemory((char *)p,vec.size(),PyBUF_READ);
}
};
从Python打印字节并将其与C ++代码的输出进行比较时,会丢失一些信息。
所以C ++的输出看起来像这样(数据被截断了)
memoryview.tobytes().hex()
并且来自Python(数据被截断)
ffffffffffffffd8ffffffffffffffe00104a4649460110010100ffffffffffffffdb043064565466567768a10aa99a14efc1017141818171416161a1d251f1a1b231c
因此,用单个ffd8ffe000104a46494600010100000100010000ffdb00430006040506050406060506070706080a100a0a09090a140e0f0c1017141818171416161a1d251f1a1b231c
替换了C ++中的所有ff
,但是无论如何,这两个结果都开始在ff
上排列起来,这对我来说没有任何意义。
我认为从10171418
到const unsigned char *
的类型转换可能出了点问题,但是我不知道如何解决。
系统:MacOS 10.13.6
Python 3.7.0
提升1.69.0
C ++ 14
编辑
以上部分仅显示了我认为相关的部分。完整的代码在这里:
char *