Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将ctypes argtypes c_ubytes用于无符号字符*? 我是Python的新手,我尝试使用C++模块作为AES库::AES。h。 它包含一个字节定义为无符号字符的模块: void AES::set_IV(unsigned long long int IVCl){ memcpy(iv,&IVCl,8); memcpy(iv+8,&IVCl,8); IVC = IVCl; } void AES::get_IV(byte *out){ memcpy(out,&IVC,8); memcpy(out+8,&IVC,8); } void AES::iv_inc(){ IVC += 1; memcpy(iv,&IVC,8); memcpy(iv+8,&IVC,8); }_Python_C++_Ctypes - Fatal编程技术网

如何将ctypes argtypes c_ubytes用于无符号字符*? 我是Python的新手,我尝试使用C++模块作为AES库::AES。h。 它包含一个字节定义为无符号字符的模块: void AES::set_IV(unsigned long long int IVCl){ memcpy(iv,&IVCl,8); memcpy(iv+8,&IVCl,8); IVC = IVCl; } void AES::get_IV(byte *out){ memcpy(out,&IVC,8); memcpy(out+8,&IVC,8); } void AES::iv_inc(){ IVC += 1; memcpy(iv,&IVC,8); memcpy(iv+8,&IVC,8); }

如何将ctypes argtypes c_ubytes用于无符号字符*? 我是Python的新手,我尝试使用C++模块作为AES库::AES。h。 它包含一个字节定义为无符号字符的模块: void AES::set_IV(unsigned long long int IVCl){ memcpy(iv,&IVCl,8); memcpy(iv+8,&IVCl,8); IVC = IVCl; } void AES::get_IV(byte *out){ memcpy(out,&IVC,8); memcpy(out+8,&IVC,8); } void AES::iv_inc(){ IVC += 1; memcpy(iv,&IVC,8); memcpy(iv+8,&IVC,8); },python,c++,ctypes,Python,C++,Ctypes,我尝试了一些在Python中使用它的代码: from ctypes import * import ctypes import numpy import glob libfile = glob.glob('build/*/AES.so')[0] mylib = ctypes.cdll.LoadLibrary(libfile) x = c_ulonglong(22222222) y = numpy.ctypeslib.as_array(x) iv = (c_ubyte * 16)() my_i

我尝试了一些在Python中使用它的代码:

from ctypes import *
import ctypes
import numpy
import glob

libfile = glob.glob('build/*/AES.so')[0]
mylib = ctypes.cdll.LoadLibrary(libfile)

x = c_ulonglong(22222222)
y = numpy.ctypeslib.as_array(x)
iv = (c_ubyte * 16)()
my_iv = (ctypes.c_ubyte * 16)(0)

pointer_type =ctypes.POINTER(ctypes.c_ubyte)
pointer = ctypes.cast(my_iv, pointer_type)

mylib._ZN3AES6set_IVEy.argtypes = [numpy.ctypeslib.ndpointer(dtype = ctypes.c_ulonglong)]
mylib._ZN3AES6set_IVEy.restype = None
mylib._ZN3AES6set_IVEy(y)  # the set_IV C++ func
mylib._ZN3AES6iv_incEv.restypes = None
mylib._ZN3AES6iv_incEv()   # the iv_inc C++ func
print("OK")
mylib._ZN3AES6get_IVEPh.argtypes =[(pointer_type)]
mylib._ZN3AES6get_IVEPh(pointer)   # the get_IV C++ func
print("OK")
结果是:[在此处输入图像描述][1] 这意味着前两个功能已完全运行,但最后一个分段故障意味着发生了错误。我在网上搜索过这个,但仍然不知道这个。 此外,我在raspberry pi上使用python3编写代码。 你能告诉我这个问题吗?
谢谢

  [1]:

CTypes代表C(不是C++)类型。你应该寻找其他的选择(PyBind11,Cython,SWIG等等)。对不起,这是我的错。我会检查你建议的选项。谢谢你的帮助。但是你能告诉我为什么上面两个函数可以正常运行吗?我试过了,它运行。可能是因为C++指针与C指针(简单地址)相同。如果你只需要它可能会起作用(虽然不建议这样做),但是如果你想更深入,问题就开始了。好的,我明白了。谢谢Cristi.CTypes代表C(不是C++)类型。你应该寻找其他的选择(PyBind11,Cython,SWIG等等)。对不起,这是我的错。我会检查你建议的选项。谢谢你的帮助。但是你能告诉我为什么上面两个函数可以正常运行吗?我试过了,它运行。可能是因为C++指针与C指针(简单地址)相同。如果你只需要它可能会起作用(虽然不建议这样做),但是如果你想更深入,问题就开始了。好的,我明白了。谢谢你,克里斯蒂。