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

作者尝试使用Python调用32位DLL,并传递uint32数组数据时遇到问题。输出数据异常,尤其是在正弦波的正半周期间。通过将数据处理过程封装成DLL并逐一转换数据类型的方法解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

背景

我使用python调用一个32bit的dll,其中有一个函数需要传递一个uint32的数组,我把该数组定义为一个指针类型传递在这里插入图片描述

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

理论上没有问题,但是从仪器读出来的数据不对。因为输入的数组是一个sin数组,所以输出的数组也应该是sin数组才对,但是打印数据发现数据在大于0的上半部分波动十分大。显然是错误的数据
在这里插入图片描述
使用c++却完全没有这个问题,我把c++和python输入的数据进行比对也是完全一致的,不知道那里出现的问题

解决

1.猜测可能为输入的数据比对。尽管数据是一致的。但是对于output_data数据处理我是直接在python里面进行,可能是输入数据类型在python和c++里面不一致导致。所以我把处理部分也做成了一个dll单独处理数据的转换部分。并且为了稳妥起见我是一个数据的一个数据的单独处理。
![在这里插入图片描述](https://img-blog.csdnimg.cn/4ae3565b18ad4eedb561a2b03e5e2093.png在这里插入图片描述

然后重新建立一个c_uint32类型的数组,转换后进行赋值处理,最后结果正确在这里插入图片描述

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值