Я работаю над написанием некоторых тестовых примеров для класса, который предположительно читается с std::istream
и записывается в std::ostream
. В рамках процесса тестирования я хотел бы вручную создать блок данных тестового файла, обернуть его в std::stringstream
и передать его в мой класс для обработки.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, но я, очевидно, пытаясь избежать сериализаций моих данных в этой манере.
HTTP:.//stackoverflow.com/questions/1150843/binary-version-of- iostream – oakad
iostream не разработан с учетом этого использования. Возможно, вы захотите рассмотреть другие библиотеки, такие как boost :: spirit :: karma или boost :: serialize. – oakad
@oakad Или если вы хотите использовать форматы '>>' и '<<' (скажем, потому что вы не сериализуете, а читаете произвольные данные в двоичном формате), довольно просто определить новые классы потоков, контракт "- это своего рода двоичный формат, а не текст. –