如何将char*转换为std :: vector?

Ric*_*nop 27 c++

我有一个char*变量:

// char* buffer;
// ...
fread (buffer, 1, lSize, pFile);
// ...
Run Code Online (Sandbox Code Playgroud)

我怎样才能将它转换为std :: vector?施法将给我一个错误.

ron*_*nag 70

std::vector<char> data(buffer, buffer + size);
Run Code Online (Sandbox Code Playgroud)

詹姆斯麦克纳利斯的回答是更好的,如果你能做到这一点.

  • 即使James的回答鼓励更好的代码,这也是问题的正确答案.有时你只需要一个char*开头. (22认同)
  • 这是复制缓冲区内的数据还是只是包装它? (3认同)

Jam*_*lis 22

为什么不使用a std::vector开头:

std::vector<char> buffer(lSize);
std::fread(&buffer[0], 1, buffer.size(), pFile);
Run Code Online (Sandbox Code Playgroud)

  • ...因为他有一个“char *” (16认同)

mgi*_*uca 10

你不能在 char* 和 vector 之间进行转换;指针转换会导致结果与输入具有完全相同的字节,因此除非您进行低级位操作,否则这通常是一个坏主意。

假设您想构建一个字符向量,您可以创建一个新的向量类型对象std::vector<char>(请注意,您需要提供向量元素的类型),并通过将开始和结束指针传递给构造函数来从数组中初始化它:

std::vector<char> vec(buffer, buffer+lSize);
Run Code Online (Sandbox Code Playgroud)

请注意,第二个参数是“结束指针”,在 C++ 中很常见。重要的是,它是指向缓冲区末尾之后的字符的指针,而不是缓冲区中的最后一个字符。换句话说,开始是包容性的,但结束是排斥性的。

另一种可能性(因为您正在处理字符)是使用 astd::string代替。这可能是也可能不是您想要的(取决于您是将 char* 视为字符串还是字节数组)。你可以用同样的方式构造它:

std::string str(buffer, buffer+lSize);
Run Code Online (Sandbox Code Playgroud)

或者使用不同的构造函数,将大小作为第二个参数:

std::string str(buffer, lSize);
Run Code Online (Sandbox Code Playgroud)