我正在创建一个项目,该项目使用我在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字符的数组)
答案 0 :(得分:0)
Go的静态类型系统和类型安全不会让你隐式转换类型,并且不会让数组衰减成指针。您需要使用unsafe
包手动转换它:
(*C.uchar)(unsafe.Pointer(pk2))