使用带有typedef变量的cgo

时间:2018-03-12 19:24:31

标签: c go cgo

我正在创建一个项目,该项目使用我在C中编码的加密技术,因为现有的库和速度。在尝试与Cgo接口时,我在使用C创建的typedef时遇到了一些问题。下面是一个例子:

typedef unsigned char ec_scalar[32];

我能够成功创建ec_point变量,并使用接受ec_point *的函数。但是,每当我尝试使用通过正常ec_point传递的函数时,我都会收到错误:

cannot use pk2 (type C.ec_scalar) as type *C.uchar in argument to _Cfunc_secret_to_public

我似乎无法找到一种方法可以轻松转换它。我也不想重构我的代码来接受ec_point *,因为ec_point已经是一个指针(因为它是一个32字符的数组)

1 个答案:

答案 0 :(得分:0)

Go的静态类型系统和类型安全不会让你隐式转换类型,并且不会让数组衰减成指针。您需要使用unsafe包手动转换它:

(*C.uchar)(unsafe.Pointer(pk2))