Esiste un meccanismo simile a std::streambuf
per convertire i valori multibyte nell'ordine di byte di rete? In particolare, Boost Asio offre una così primitiva? Ecco un esempio di quello che vorrei che il buffer di flusso da fare:Esiste una versione std :: streambuf che converte l'host in ordine di byte di rete?
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: Le risposte suggeriscono che questo è il modo sbagliato di pensare al problema: buffer di flusso semplicemente forniscono l'accesso a sequenze di caratteri, il loro compito non è quello di eseguire I/O o conversione formattati. Probabilmente implementerò una piccola classe di buffer che fornisce gli overload necessari per operator<<
e operator>>
per eseguire la conversione.
La tua domanda avrebbe più senso se hai definito "b2" nel tuo esempio. Inoltre, perché l'operatore << (..., unsigned long long) 'invoca' htons'? Non preferiresti invocare 'htonll'? –
Grazie Rob, ho corretto gli errori. – mavam
Penso che tu stia cercando la soluzione nel posto sbagliato. Quando il formattatore ('ostream') ha finito, passa un flusso di byte allo' streambuf'. Sembra proprio che tu voglia un "ostream" "binario" se l'ordine dei byte dei numeri di uscita è un problema che stai cercando di risolvere. –