【问题标题】:Using cgo with typedef variables将 cgo 与 typedef 变量一起使用
【发布时间】:2018-03-13 03:34:28
【问题描述】:

由于现有库和速度,我正在创建一个使用我用 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 字符的数组)

【问题讨论】:

  • 什么是ec_scalar
  • 对不起,我的意思是输入标量而不是点。

标签: c go cgo


【解决方案1】:

Go 的静态类型系统和类型安全不允许您隐式转换类型,也不允许数组衰减为指针。您需要使用unsafe 包手动转换它:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    相关资源
    最近更新 更多