2017-08-09 12 views
0

私はいくつかのCコードをGoに書き直しています。Goで関数にスライスを送る方法は?

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関数は次のように定義されています:

static void indcpa_enc(unsigned char *c, 
         const unsigned char *m, 
         const unsigned char *pk, 
         const unsigned char *coins) 

ので、代わりにcharアレイを使用しての私の囲碁のコードで私はbyte配列を使用し、私のCコードで私はこのようなものを持っています。

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関数は次のように定義されています:私はこのような何か持ってどこ

func INDCPAEnc(c []byte, m [SharedKeyBytes]byte, pk []byte, coins [CoinBytes]byte) 

もののを、移動中にこの関数呼び出しは私に型の不一致に関する配列を、提供します。上記のようなCコードを適切なGoコードに変換するにはどうすればよいですか?また、CのようにGo関数のパラメータにポインタの表記*を使用する必要がありますか?

答えて

7

長さを指定するパラメータ(例:[SharedKeyBytes]byte)は、スライスではなく配列です。そのため、スライスを渡すことができないため、型の不一致のエラーが発生します。あなたがいずれかを行うことができます

  • 変更パラメータの型は、([]byte
  • コピー前に関数を呼び出すに適切なサイズの配列へのスライスをスライスし、その後、代わりにスライスの関数に配列を渡す(playground example
関連する問題