0

次のコードがあります。配列を使用すると問題なく動作します。ハッシュのフットプリントを削減できるように、ベクトルでリファクタリングしたいだけです。

uint8_t* rip(uint8_t *in, vector<uint8_t*> *out)
{
    RIPEMD160(in, 32, out);
    return out;
}

int main()
{
    char pub_key[] = "0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6";
    vector<uint8_t> res_rip(20);
    uint8_t res_sha[32];
    uint8_t res_tmp[65];
    hex_decode(pub_key,131,res_tmp);
    for(int i =0; i < 65; i++)
        cout << setw(2) << setfill('0') << hex << (int)res_tmp[i];
    cout << endl << endl;
    sha(res_tmp,res_sha);
    rip(res_sha,&res_rip);
    for(int i =0; i < 32; i++)
        cout << setw(2) << setfill('0') << hex << (int)res_sha[i];
    cout << endl << endl;
    for(int i =0; i < 20; i++)
        cout << setw(2) << setfill('0') << hex << (int)res_rip[i];
    return 0;
}

ベクトルを関数に渡す方法や、正しく返すために何をする必要があるのか​​ わかりません。

コンパイラ メッセージが表示されるerror: cannot convert 'std::vector<unsigned char*>*' to 'unsigned char*' for argument '3' to 'unsigned char* RIPEMD160(const unsigned char*, size_t, unsigned char*)'

4

1 に答える 1

4

その関数は、データへのポインターではなく、std::vector.

C++11 では、 を呼び出すことにより、ベクター内のデータへのポインターを取得できますstd::vector::data()

RIPEMD160(in, 32, out->data() );

C++03 以降では、最初の要素のアドレスを取得することで、ベクター内のデータへのポインターを取得できます。

RIPEMD160(in, 32, &out->at(0) );
于 2013-04-22T17:53:34.277 に答える