Byte Buffer in HEx darstellen mit Streams?
-
Hallo
Ich müsste einen Byte Buffer als Hex darstellen und wollte fragen ob es da vielleicht eine elegante Möglichkeit gibt (vielleicht mit streams).
Die Fortmatierung müsste also so passieren dass ein Buffer mit
0x34 0xA4, ...
in ASCII umgewandelt wird in:
0x33 0x34 0x41 0x34
um dann 34 41 darzustellen.mit zahlen und stringstreams geht das ja ganz einfach wie z.B.
std::ostringstream strstm;
unsigned char ucNumber = 123;
strstm << "0x" << hex << setfill('0') << setw(8) << ucNumber;
Die Ausgabe mit strstm.str().c_str() gibt dann:
0x0000007BAber mit Byte Buffer?

(händisch das zu zertröseln und dazustellen ist ja kein Problem aber so in 1-2 Zeilen?)Danke schon mal
-
setz die ausgabe auf hex, dann nimmst du copy(buffer.begin(), buffer.end(), ostream_iterator<char>(deinoutputstream));
Syntax ist jetzt nicht hunderprozent korrekt, aber copy einem ostream_iterator als Ziel ist der einfache Weg.
-
Mit copy und ostream_iterator geht's, wenn man aus dem Byte auch eine Zahl machst. Also etwa so:
#include <iostream> #include <iterator> struct ByteToHex { ByteToHex( char c ) : m_c( c ) {} // implizite Konvertierung zulassen unsigned char m_c; // unsigned ist wichtig }; std::ostream& operator<<( std::ostream& out, const ByteToHex& bth ) { return out << unsigned( bth.m_c ); // evt. Formatierung hinzufügen } int main() { using namespace std; char Bytes[] = "Text and more \n\t\a"; // ein Byte-Buffer copy( Bytes, Bytes + sizeof(Bytes), ostream_iterator< ByteToHex >( cout << hex << showbase, " " ) ); cout << endl; }Ich unterstelle mal, Du meinst mit ByteBuffer etwas in der Art von char[] oder unsigned char[].
Gruß
Werner