我有一个自定义函数,它将值复制到缓冲区
void foo(void *buffer, std::initializer_list<unsigned char> l) {
memcpy(buffer, l.begin(), l.size());
}
初始化程序列表参数将十六进制值作为参数。但是,我想将其更改为字符串表示形式,而不是将参数传递为{0x01,0x02,0x04},而是将其传递为“0x01 0x02 0x04”。
我将
std::initializer_list<unsigned char>
更改为std::vector。但是我收到了从vector
到void *
的无效转换错误。void foo(void *buffer, std::vector<unsigned char> l) {
memcpy(buffer, reinterpret_cast<void *>(l.begin()), l.size());
}
最佳答案
std::vector::begin
返回一个迭代器,而不是指向第一个元素的指针。尝试...
void foo(void *buffer, std::vector<unsigned char> l)
{
memcpy(buffer, l.data(), l.size());
}
更好的是,如果 vector 很大,那么您可能要考虑通过const引用而不是按值传递...
void foo(void *buffer, const std::vector<unsigned char> &l)
{
memcpy(buffer, l.data(), l.size());
}
关于c++ - 使用memcpy将std::vector <unsigned char>复制到void * buffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60505975/