Существует ли версия std :: streambuf, которая преобразует хост в сетевой порядок байтов? - PullRequest
9 голосов
/ 07 марта 2012

Существует ли 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

EDIT : ответы показывают, что это неправильный способ думать о проблеме: простопредоставлять доступ к последовательностям символов, их задача не выполнять форматированный ввод / вывод или преобразование.Я, вероятно, реализую небольшой буферный класс, который обеспечивает необходимые перегрузки для operator<< и operator>> для выполнения преобразования.

1 Ответ

7 голосов
/ 07 марта 2012

Нет, и я скажу вам, почему.

istream::operator>> и ostream::operator<< работают с потоком символов, преобразуя их из понятной человеку формы в исходную форму компьютера.streambuf вообще не участвует в этом преобразовании, за исключением предоставления (или принятия) потока символов.

Другими словами, отформатированные процедуры ввода / вывода преобразуются из символьной формы в двоичную форму.

Вы запрашиваете преобразование из одной двоичной формы в другую двоичную форму.Это не одно и то же, и отформатированные текстовые подпрограммы stream - это неправильное место для поиска.

Тем не менее, вы могли бы создать свой собственный класс, который реализует operator<<operator>>, и имеют те подпрограммы , которые выполняют обмен байтов в сети.

...