hexdump()
-
Habe im Netz das File:
http://gitorious.org/snaewe/sandbox/blobs/master/hexdump.cc
gefunden.
Mit dieser Funktion:void hexdump(std::ostream& outs, const std::string& s, std::streamsize line_len)
Ich möchte ja den ascii in hex umwandeln um in am Bildschirm in hex ausgeben zu können. Müsste ja grundlegend ja gehen mit dieser Funktion, oder?
Nun, meine Erfahrungen der c++ sind schon ein paar jahre her und ich muss mich erst wieder erst in diverser Sachen tiefer hineinlesen.
So würde ich euch bitte mir kurz die passenden Datentyen für den Input/Output zu geben, da ich mit diesem Strems noch komplett anstehe.
-
steve888 schrieb:
Ich möchte ja den ascii in hex umwandeln um in am Bildschirm in hex ausgeben zu können. Müsste ja grundlegend ja gehen mit dieser Funktion, oder?
Wenn das so in der Doku dazu drinsteht ja.
Nun, meine Erfahrungen der c++ sind schon ein paar jahre her und ich muss mich erst wieder erst in diverser Sachen tiefer hineinlesen.
So würde ich euch bitte mir kurz die passenden Datentyen für den Input/Output zu geben, da ich mit diesem Strems noch komplett anstehe.Die Datentypen stehen doch in der Funktionssignatur. Einen ostream für den output, den string den du ausgeben willst, und ein std::streamsize für die Zeilenlänge (ich vermute mal dass hexdump alle paar Zeichen einen Zeilenumbruch einfügt). streamsize ist vermutlich ein vorzeichenloser integraler typ, steht aber mit Sicherheit in der entsprechenden Referenz drin (z.B. http://cplusplus.com/reference).
Wenn du mit den Streams noch nicht familiär genug bist um die Funktion zu benutzen kommst du wohl kaum drumrum, dich ein wenig einzulesen, Tutorials & Co gibts genug online. Mehr dazu auch im Thread "Du brauchst Hilfe?" (Link siehe Signatur)
-
Danke, pumukl.
Habe wohl etwas zu schnell herein geschrieben. Der zweite und dritte Parameter der Funktion sind ja auch einfach...
Nur der erste, der ostream, der stellt für mich noch ein größeres problem dar. Da ich einfach noch nicht daraufgekommen bin in, ihn in einen String (bzw. anderen Datentyp) zu formatieren.
-
ostringstream
-
Vorerst, Danke.
Ich hatte mir gestern gedacht, ich hätte es nun geschafft diese Funktion zu Bedinienen. Nun stehe ich aber schon wieder an, da ich anscheinend irgendetwas falsch verstehe / bediene, und es einefach nicht zusammenbringe ascii in hex umwandeln um in am Bildschirm in hex ausgeben zu können.
Vielleicht liegt es an dieser line_len??
Wäre toll wenn mir jeman wieder nen Tipp geben könnte.Hier wäre der Code von:
http://gitorious.org/snaewe/sandbox/blobs/master/hexdump.ccvoid hexout(std::ostream& os, unsigned char c) { unsigned char uc = static_cast<unsigned char>(c); os << std::setw(2) << std::setfill('0') << (unsigned int)uc << ' '; } void hexdump(std::ostream& outs, const std::string& s, std::streamsize line_len) { std::ostringstream os; const std::string::size_type slen(s.size()); int i(0); std::string::size_type pos(0); const std::streamsize lines(slen / line_len); const std::streamsize chars(slen % line_len); std::ios::fmtflags f(os.flags()); os << std::hex; for(std::streamsize line = 0; line < lines; ++line) { for(i = 0; i < line_len; ++i) { hexout(os, s[pos++]); } os << '\n'; } for(i = 0; i < chars; ++i) { hexout(os, s[pos++]); } if(i) os << '\n'; os.flags(f); outs << os.str(); }
-
Hat denn keiner von euch Profis Erfahrung mit der Umwandlung von ASCII in HEX??
Mein Problem steht ja grundsätzlich auch nur darin 1Byte oder auch gleich 4Byte (und nicht mehr, auch keine Datei...) umzuwandeln.
-
Sag doch einfach mal was Du nicht verstehst oder was nicht geht..
Simon
-
Ich hatte einfach diese Funktion hexdump() zum testen verschieden ausprobiert, letzenlich mit den Parametern so:
std::string in = "A4"; std::ostringstream out; std::streamsize len = 2; hexdump(out, in, len);
Anscheinend verstehe ich bei der Bedienung was falsch, weil ich einfach nichts raus bekomme!!!!
-
cout << out.str();
oder gleich
hexdump(cout, in, len);
-
Anscheinend verstehe ich bei der Bedienung was falsch, weil ich einfach nichts raus bekomme!!!!
Wohin raus?
std::cout / std::wcout sind die Console Output Streams.
std::ostringstream / std::wostringstream sind String Stream -> output geht in einen String......
Simon
-
Ich bin die Funktion hexdump(); schon öfters durchgelaufen, und es gelangt in der Funktion nichts zu den outs (std::ostream).
So bin ich der Meinung, dass ich anscheinend noch was falsch bediene (dieser line_len vielleicht??)
-
Ich weiss zwar nicht was Du erwartest was rauskommt, aber mal so als Bsp.
std::string in = "A4"; std::ostringstream out; std::streamsize len = 2; hexdump(out, in, len); std::string str = out.str();
str enthält dann den formatierten String.
Wenn Du anstelle des std::ostringstream das std::cout Objekt nimmst, wird dasselbe auf der Console ausgegeben.Simon
-
Danke.
Wirklich dooofer Fehler von mir. Ich hatte da überhaupt nicht daran gegacht den out in einen String zu formtieren.(Da mich beim durchlaufen im Programm es immer irritiert hat, dass kein Wert im out steht und ich somit der Meinung war, es liegt wo ein Fehler...)
Blöd von mir, aber danke.