我正在编写一个小程序,它以16个字节为一组从二进制文件中读取字节(请不要问为什么),对其进行修改,然后将其写入另一个文件。
fstream::read
函数读取到一个 char *
缓冲区中,我最初传递给了一个类似下面的函数:
char* modify (char block[16], std::string key)
修改操作是在
block
上完成的,此后返回该块。在浏览 SO 的帖子时,我意识到使用 std::vector<char>
可能是一个更好的想法。我的下一个担心是如何将 char *
转换为 std::vector<char>
。再一次,SO 给了我答案。但现在我想知道的是:如果使用
std::vector<char>
而不是 char*
是这么好的想法,为什么 fstream
函数中还要使用 char*
呢?另外,将来自
fstream
的 char*
转换为 std::vector<char>
是否是一个好主意呢?编辑:我现在意识到由于
fstream::read
用于直接向对象写入数据,所以 char *
是必需的。现在我必须修改我的问题。首先,为什么没有为 fstream::read
提供重载函数?其次,在我编写的程序中,哪个选项更好?
.read(&vect[0], 16)
(或者如果您使用的是C++11,则使用.read(vect.data(), 16)
)将其读入到std::vector
中,以避免使用char*
中间人。只需确保使用.resize
分配足够的数据空间即可。 - Xymostechstd::vector<char>
(有时你会得到一个char*
库来读取数据)。如果std::fstream
强制你使用std::vector<char>
而不允许使用许多变体(原始数组,std::array
等),那就有点奇怪了。此外,有时您需要直接将数据读取/反序列化到类型中(如int
),在这种情况下,std::vector<char>
只是...奇怪。 - Cornstalkssizeof
。 - Tony Delroyvector<double>
看起来很有用。对其他人来说,deque<float>
很有用。很快就会有很多read()
的重载,很难看出fstream
类做了什么...;-) - Tony Delroy