Существует ли версия std::streambuf, которая преобразует хост в сетевой порядок байтов?
Есть ли std::streambuf
механизм для преобразования многобайтовых значений в сетевой порядок байтов? В частности, Boost Asio предлагает такой примитив? Вот пример того, что я хотел бы сделать буфер потока:
uint64_t x = 42ull;
network_streambuf b1;
std::ostream os(&b1);
os << 42ull; // htonll
network_streambuf b2;
std::istream is(&b2);
uint64_t y;
is >> y; // ntohll
РЕДАКТИРОВАТЬ: ответы предполагают, что это неправильный способ думать о проблеме: потоковые буферы просто предоставляют доступ к символьным последовательностям, их задача - не выполнять форматированный ввод / вывод или преобразование. Я, вероятно, реализую небольшой буферный класс, который обеспечивает необходимые перегрузки для operator<<
а также operator>>
выполнить преобразование.
1 ответ
Нет, и я скажу тебе почему.
istream::operator>>
а также ostream::operator<<
работать с потоком символов, преобразовывая их из понятной человеку формы в исходную форму компьютера. streambuf
не участвует в этом преобразовании вообще, за исключением предоставления (или принятия) потока символов.
Другими словами, отформатированные процедуры ввода / вывода преобразуются из символьной формы в двоичную форму.
Вы запрашиваете преобразование из одной двоичной формы в другую двоичную форму. Это не одно и то же, и stream
подпрограммы с форматированным текстом - неподходящее место для поиска.
Тем не менее, вы можете создать свой собственный класс, который реализует operator<<
а также operator>>
и эти подпрограммы выполняют обмен байтов в сети.