Существует ли версия 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>>и эти подпрограммы выполняют обмен байтов в сети.

Другие вопросы по тегам