¿Hay un mecanismo similar a std::streambuf
para convertir valores de bytes múltiples en orden de bytes de red? En particular, ¿Boost Asio ofrece una primitiva? He aquí un ejemplo de lo que me gustaría que el búfer de la secuencia que debe hacer:¿Hay una versión std :: streambuf que convierta el host en orden de bytes de red?
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
EDITAR: Las respuestas sugieren que esta es la manera equivocada de pensar en el problema: los búferes de secuencia sólo tiene que proporcionar acceso a secuencias de caracteres, su trabajo no es realizar E/S formateadas o conversión. Probablemente implementaré una pequeña clase de búfer que proporciona las sobrecargas necesarias para operator<<
y operator>>
para realizar la conversión.
Su pregunta tendría más sentido si definió 'b2' en su ejemplo. Además, ¿por qué 'operator << (..., unsigned long long) 'invocar' htons'? ¿No preferiría invocar 'htonll'? –
Gracias Rob, corregí los errores. – mavam
Creo que está buscando la solución en el lugar equivocado. Para cuando el formateador ('ostream') ha terminado, pasa una secuencia de bytes al' streambuf'. Parece que realmente quieres un 'binario' 'ostream' si el orden de bytes de los números de salida es un problema que estás tratando de resolver. –