c++ - 使用memcpy将std::vector <unsigned char>复制到void * buffer

标签 c++ hex memcpy

我有一个自定义函数,它将值复制到缓冲区

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。但是我收到了从vectorvoid *的无效转换错误。
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/

相关文章:

c++ - DrawIconEx 留下 mask 伪影

c++ - "error: subscripted value is not an array, pointer, or vector"我正在使用一个字符串

c++ - 在 C/C++ 中覆盖符号

c++ - 如何确保在 C++ 中只输出 6 位、用 0 填充的十六进制值?

java - 在 Java 中将十六进制字符串转换回字符串

c - 使用 memcpy 和 strtoul 获取乱码而不是数字

c++ - 支持单个位偏移的类似“memcpy”的函数?

Visual Studio 和 Eclipse 中的 C++ 图形库

c++ - 我的特定应用程序的 memcpy 或 std::copy

javascript - 交换字节序 javascript