我正在为一个类编写一些测试用例,该类可能会从
尽管它确实起作用,但我觉得我的当前解决方案缺乏优雅之处。我真的不喜欢使用那些带有
有没有办法使用流运算符以二进制形式写入这些数据?我希望能够像下面这样做。
如果我采用这种方法,提取数字会得到一个
std::istream
读取并写入std::ostream
。作为测试过程的一部分,我想手动创建一个测试文件数据块,将其包装在std::stringstream
中,然后将其传递给我的类进行处理。尽管它确实起作用,但我觉得我的当前解决方案缺乏优雅之处。我真的不喜欢使用那些带有
reinterpret_cast
的原始写入调用。std::stringstream file;
uint32_t version = 1;
uint32_t dataSize = 10;
uint32_t recordCount = 3;
file.write(reinterpret_cast<char*>(&version), sizeof(version));
file.write(reinterpret_cast<char*>(&dataSize), sizeof(dataSize));
file.write(reinterpret_cast<char*>(&recordCount), sizeof(recordCount));
myclass.read(file)
有没有办法使用流运算符以二进制形式写入这些数据?我希望能够像下面这样做。
std::stringstream file;
uint32_t version = 1;
uint32_t dataSize = 0;
uint32_t recordCount = 3;
file << version << dataSize << recordCount;
myclass.read(file);
如果我采用这种方法,提取数字会得到一个
103
的结果,在 ascii 上下文中这是预期的,但我明显想避免以这种方式序列化我的数据。
>>
和<<
格式(比如因为您不是在序列化,而是以二进制格式读取任意数据),那么定义新的流类来代替文本流也是相当容易的。这些新的流类的“契约”是某种二进制格式。@oakad - James Kanze