PyMemoryView_FromMemory丢失数据

时间:2019-02-26 05:05:04

标签: python c++ opencv boost-python python-extensions

我目前正在编写一些利用 # 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上排列起来,这对我来说没有任何意义。

我认为从10171418const unsigned char *的类型转换可能出了点问题,但是我不知道如何解决。

  

系统:MacOS 10.13.6

     

Python 3.7.0

     

提升1.69.0

     

C ++ 14

编辑

以上部分仅显示了我认为相关的部分。完整的代码在这里:

char *

0 个答案:

没有答案