istream и ostream на разных платформах - PullRequest
4 голосов
/ 04 ноября 2011

Предположим, я хотел бы написать это на моей машине с прямым порядком байтов

an_ostream_impl my_output_on_BE;
my_output_on_BE << __int32(0x1234);

И это на моей машине с прямым порядком байтов

an_istream_impl my_input_on_LE;  

__int32 value;
my_input_on_LE >> value;
assert( value == 0x1234 );

Существует ли реализация istream / ostream, позволяющая это сделать? Например. это всегда потоковые числа в Big Endian (или любой другой формат)?

Ответы [ 3 ]

2 голосов
/ 04 ноября 2011

Если вам нужно обмениваться данными более сложными, чем одно целое число между машинами, я бы искренне рекомендовал Буферы протокола Google .Вы определяете «сообщения» в текстовом файле, запускаете их через компилятор (protoc) и получаете исходный текст на выбранном вами языке.Этот источник определяет объекты, соответствующие спецификациям вашего сообщения, плюс методы сериализации и десериализации.

1 голос
/ 04 ноября 2011

Я не знаю ни одной реализации, способной на это из коробки. Вероятно, самый простой способ написать что-то подобное - использовать Boost.Iostreams . Вы можете просто реализовать устройств для соответствующих преобразований, а затем использовать stream для создания потока, который делегирует записанное вами устройство и предоставляет стандартный интерфейс iostream.

0 голосов
/ 04 ноября 2011

В этом случае единственный способ, вероятно, состоит в том, чтобы сериализовать / десериализовать себя, т. Е. Читать / записывать байт за байтом.

...