1

我目前正在开源平台上开发一段与 c++ 集成的 python 代码。Python 类和定义将参数传递给 c++ 文件,函数由此运行。我的 c++ 文件是一个 packet_sink 文件,它采用下面提到的 3 个输入参数:

packet_sink (const std::vector<unsigned char>& sync_vector,
                                msg_queue_sptr target_queue, int threshold)

部分python代码如下:

   self.threshold = -1
   if access_code is None:
       code = tuple(string_to_1_0_list(default_access_code))
       access_code = to_1_0_string(code)
   if not packet_utils.is_1_0_string(access_code):
       raise ValueError, "Invalid access_code %r. Must be string of 1's and 0's" % (access_code,)
   print " _access_code : %s " %(self._access_code,)

   self._msgq = gr.msg_queue()# holds packets fromthe PHY

   self.phy_anay_demod= phy_anay_demod(self,*args, **kwargs)
   self._packet_sink =gr.packet_sink(self._access_code,self._msgq,self.threshold)

的值为_access_code

0011010110111011001001010100011101001111001100010000010000111111

但我收到的错误消息如下:

类型错误:在方法 'packet_sink' 中,类型为 'std::vector< unsigned char,std::allocator< unsigned char >> const &' 的参数 1。

如果不能解决问题,任何人都可以帮助我理解错误。

4

1 回答 1

0

在我看来,self._access_code 应该是一个整数列表或元组,它们要么是 0 要么是 1。

Gnuradio 使用 SWIG 从 C++ 代码创建 python 接口。SWIG 会将 C++ 向量映射到 python 列表。因此,如果您传入一个整数列表(0 或 1),则应该很高兴将其转换为向量。

我的猜测是您的 self._access_code 是一个字符串,您需要将函数 string_to_1_0_list 应用于它。

于 2012-02-23T20:25:24.963 回答