C++ c++;将存储在std::vector中的数据传递给c_func(void*data)
我有一个C++ c++;将存储在std::vector中的数据传递给c_func(void*data),c++,c,stdvector,void,C++,C,Stdvector,Void,我有一个std::vector,我需要从libgcrypt获取其内容的散列 如何将std::vector vec的内容放入gcry\u md\u hash\u缓冲区(gcry\u md\u MD5,(void*)和摘要,(void*)缓冲区,vec.size())其中buffer是vec中的数据?如果您使用的是C++11,请通过 vec.data() 对于缓冲区 参考: 如果没有,则传递&(vec.front())。vec的元素保证在连续存储中。如果您使用的是C++11,请通过 vec.dat
std::vector
,我需要从libgcrypt获取其内容的散列
如何将
std::vector vec
的内容放入gcry\u md\u hash\u缓冲区(gcry\u md\u MD5,(void*)和摘要,(void*)缓冲区,vec.size())
其中buffer
是vec
中的数据
?如果您使用的是C++11,请通过
vec.data()
对于缓冲区
参考:
如果没有,则传递
&(vec.front())
。vec
的元素保证在连续存储中。如果您使用的是C++11,请通过
vec.data()
对于缓冲区
参考:
如果没有,则传递
&(vec.front())
。vec
的元素保证在连续存储中。函数gcry\u md\u hash\u buffer()
对buffer
有什么期望?它应该是int
的数组吗?如果是,您可以传递&vec[0]
或vec.data()
-std::vector
保证数据的底层表示与C数组中的表示相同 函数gcry\u md\u hash\u buffer()
对buffer
的期望是什么?它应该是int
的数组吗?如果是,您可以传递&vec[0]
或vec.data()
-std::vector
保证数据的底层表示与C数组中的表示相同 您还可以使用std::vector::operator[]
(索引运算符)和(&
)运算符的地址:
&(buffer[0])
上面首先获取对向量的第一个元素的引用(buffer[0]
),取其地址&(…)
在哈希函数中使用它
gcry_md_hash_buffer(GCRY_MD_MD5, (void*)&digest, (void*)(&(buffer[0])), vec.size());
// ^^^^^^^^^^^^
请注意,许多括号是不必要的,尽管我通常使用它们来消除歧义和可能的错误。您还可以使用
std::vector::operator[]
(索引运算符)和(&
)运算符的地址:
&(buffer[0])
上面首先获取对向量的第一个元素的引用(buffer[0]
),取其地址&(…)
在哈希函数中使用它
gcry_md_hash_buffer(GCRY_MD_MD5, (void*)&digest, (void*)(&(buffer[0])), vec.size());
// ^^^^^^^^^^^^
请注意,许多括号是不必要的,尽管我通常使用它们来消除歧义和可能出现错误的风险。谢谢,没有记住这一点我感到非常尴尬。谢谢,没有记住这一点我感到非常尴尬。