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

Posted

技术标签:

【中文标题】如何将 char* 转换为 std::vector?【英文标题】:How to convert char* to std::vector? 【发布时间】:2010-11-24 23:20:16 【问题描述】:

我有一个 char* 变量:

// char* buffer;
// ...
fread (buffer, 1, lSize, pFile);
// ...

如何将其转换为 std::vector?投射会让我出错。

【问题讨论】:

【参考方案1】:
std::vector<char> data(buffer, buffer + size);

如果你能那样做的话,James McNellis 的回答会更好。

【讨论】:

尽管 James 的回答鼓励更好的代码,但这是问题的正确答案。有时您只需以 char * 开头。 这是复制缓冲区内的数据还是只是包装它? @RayHulha 它复制数据【参考方案2】:

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

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

【讨论】:

...因为他有一个char *【参考方案3】:

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

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

std::vector<char> vec(buffer, buffer+lSize);

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

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

std::string str(buffer, buffer+lSize);

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

std::string str(buffer, lSize);

【讨论】:

以上是关于如何将 char* 转换为 std::vector?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 std::vector<std::string> 转换为 C api 的 char*[] [重复]

将 char* 转换为 std::vector

qt怎么把char[转为vector

C++ - 将 char 引用转换为 bool 引用(std::vector<bool>)

将 std::string 的向量转换为 char***

std::vector<std::string> 到 char* 数组