首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将切片发送到Go中的函数?

如何将切片发送到Go中的函数?
EN

Stack Overflow用户
提问于 2017-08-09 13:57:12
回答 1查看 71关注 0票数 0

我正在用Go重写一些C代码。在我的C代码中,我有这样的东西:

代码语言:javascript
复制
static void sharedb(unsigned char *sharedkey, unsigned char *send,
                    const unsigned char *received) {
    unsigned char krq[96]; 
    unsigned char buf[64];
    // rest removed for brevity

    indcpa_enc(send, buf, received, krq + 32);
}

其中indcpa_enc函数的定义如下:

代码语言:javascript
复制
static void indcpa_enc(unsigned char *c,
                       const unsigned char *m,
                       const unsigned char *pk,
                       const unsigned char *coins)

因此,在我的Go代码中,我没有使用char数组,而是使用了byte数组。我有这样的东西:

代码语言:javascript
复制
func SharedB(sharedKey, send, received []byte) {
    var krq [96]byte
    var buf [64]byte

    // rest removed for brevity

    INDCPAEnc(send[:], buf[:SharedKeyBytes], received[:], krq[32:32+CoinBytes])
}

其中INDCPAEnc函数的定义如下:

代码语言:javascript
复制
func INDCPAEnc(c []byte, m [SharedKeyBytes]byte, pk []byte, coins [CoinBytes]byte) 

不过,Go中的函数调用给了我一个数组,涉及类型不匹配。如何将上述C代码转换为适当的Go代码?此外,我是否应该使用指针表示法*作为我的Go函数参数,就像C中的那样?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-09 13:59:13

指定长度的参数(例如[SharedKeyBytes]byte)是数组,而不是片;因此,您不能传递一个片,因此类型错配错误。你可以:

  • 将参数类型更改为片([]byte)
  • 在调用函数之前,将切片复制到适当大小的数组中,然后将数组传递给函数而不是切片(操场实例)。
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45592817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档