Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;将存储在std::vector中的数据传递给c_func(void*data)_C++_C_Stdvector_Void - Fatal编程技术网

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());
//                                                       ^^^^^^^^^^^^

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

谢谢,没有记住这一点我感到非常尴尬。谢谢,没有记住这一点我感到非常尴尬。