我有一个 char* 变量:
// char* buffer;
// ...
fread (buffer, 1, lSize, pFile);
// ...
如何将它转换为std :: vector?强制转换会导致错误。
我有一个 char* 变量:
// char* buffer;
// ...
fread (buffer, 1, lSize, pFile);
// ...
如何将它转换为std :: vector?强制转换会导致错误。
std::vector<char> data(buffer, buffer + size);
如果您能这样做,James McNellis的答案更好。
为什么不先使用 std::vector
:
std::vector<char> buffer(lSize);
std::fread(&buffer[0], 1, buffer.size(), pFile);
char *
。 - Erik Aronesty你不能在char*和vector之间进行转换;指针转换会导致结果与输入具有完全相同的字节,因此通常情况下不是一个好主意,除非你要进行低级别的位操作。
假设你想要构建一个字符向量,你可以创建一个新的类型为std::vector<char>
的向量对象(请注意,您需要提供向量元素的类型),并通过将起始和结束指针传递给构造函数来初始化它:
std::vector<char> vec(buffer, buffer+lSize);
请注意第二个参数是“结束指针”,在C++中非常常见。重要的是,它是缓冲区末尾字符后面的指针,而不是缓冲区中的最后一个字符。换句话说,起始点是包含的,但结束点是排除的。std::string
。这可能是你想要的(根据你是将char*视为字符串还是字节数组而定)。你可以用同样的方式构建它:std::string str(buffer, buffer+lSize);
或使用不同的构造函数,将大小作为第二个参数传入:
std::string str(buffer, lSize);