c ++将存储在std :: vector中的数据传递给c_func(void * data)

时间:2013-11-19 05:48:42

标签: c++ c stdvector void

我有一个std::vector,我需要从libgcrypt获取其内容的哈希值。

如何将std::vector<int-type> vec的内容转换为gcry_md_hash_buffer(GCRY_MD_MD5, (void*)&digest, (void*)buffer, vec.size()); buffer data中的vec

3 个答案:

答案 0 :(得分:5)

如果您使用的是C ++ 11,请传递

vec.data()

代表buffer

参考:Vector::data()

如果没有,请通过&(vec.front())vec的元素保证在连续存储中。

答案 1 :(得分:0)

gcry_md_hash_buffer()buffer的期望是什么?它应该是int的数组吗?如果是,您可以传递&vec[0]vec.data() - std::vector保证数据的基础表示与C数组中的相同。

答案 2 :(得分:0)

您还可以使用std::vector::operator[](索引运算符)和地址(&)运算符:

&(buffer[0])

上面首先获得对向量的第一个元素(buffer[0])的引用,其地址为&(...)

在散列函数中使用它,

gcry_md_hash_buffer(GCRY_MD_MD5, (void*)&digest, (void*)(&(buffer[0])), vec.size());
//                                                       ^^^^^^^^^^^^

请注意,许多括号是不必要的,但我通常会将它们用来消除歧义和可能错误的风险。