Python调用dll传入uint32类型数组数据出错义

背景

我使用python调用一个32bit的dll,其中有一个函数需要传递一个uint32的数组,我把该数组定义为一个指针类型传递

python Uint8Array实现 python uint32_pycharm

但是这个数组是由一个sin函数生成的double数组转换得到。所以在传入该数组前需要先对double数组进行处理。output_data是我在python里面生成的一个的numpy double类型数组。我先对该数组乘上一个数后转换为int32再转uint32,最后把wave_data转为c类型的指针传递到上面dll。

python Uint8Array实现 python uint32_数据_02

理论上没有问题,但是从仪器读出来的数据不对。因为输入的数组是一个sin数组,所以输出的数组也应该是sin数组才对,但是打印数据发现数据在大于0的上半部分波动十分大。显然是错误的数据

python Uint8Array实现 python uint32_python_03


使用c++却完全没有这个问题,我把c++和python输入的数据进行比对也是完全一致的,不知道那里出现的问题

解决

1.猜测可能为输入的数据比对。尽管数据是一致的。但是对于output_data数据处理我是直接在python里面进行,可能是输入数据类型在python和c++里面不一致导致。所以我把处理部分也做成了一个dll单独处理数据的转换部分。并且为了稳妥起见我是一个数据的一个数据的单独处理。

![在这里插入图片描述](

python Uint8Array实现 python uint32_python Uint8Array实现_04

然后重新建立一个c_uint32类型的数组,转换后进行赋值处理,最后结果正确

python Uint8Array实现 python uint32_pycharm_05

python Uint8Array实现 python uint32_数组_06


其他无任何改动,只改动了数据传递部分,同样的输入数据打印后和之前的值完全相同。尽管问题解决但是不太清楚为什么是这样的出现。

记录下来继续提升自己,也希望有路过的大佬可以指点一二。感激不尽。谢谢!