2013-04-22 2 views
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*)'

+0

В какой строке это сообщение об ошибке? –

+0

Также вы передаете 'vector *' функции, которая ожидает 'vector *'. – milleniumbug

ответ

4

Эта функция ожидает указатель на данные, а не std::vector.

В C++ 11 вы можете получить указатель на данные в векторе, позвонив по номеру std::vector::data().

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

В C++ 03 или более поздней версии, вы можете получить указатель на данные в векторе, взяв адрес первого элемента.

RIPEMD160(in, 32, &out->at(0)); 
+0

Не является ли вектор :: data() частью C++ 11? http://en.cppreference.com/w/cpp/container/vector/data – lucasmrod

+1

@ lucasmrod Вы правы. Кажется, что в SO теперь нечеткий переход, где C++ 11 можно предположить, если в вопросе не указывается, что ответ должен работать в более старых стандартах. –

+0

Ничего себе, не знал этого! Спасибо за информацию. – lucasmrod

Смежные вопросы