UCHAR in hex wandlen und als String ausgeben ? Wie?
-
wenn du ne binärfile schreiben willst, könntest du dir mal std::fstream::read() und std::fstream::write() an kucken
in ner binärfile steht des dann schon so drin, wie du das (scheinbar) haben willst
-
Entscheidende Zeile:
sstr << (int)uc_data_byte;Ansonsten schreibst du einen char hinein, der von std::hex nicht beeinflusst wird.
-
Spitze das scheint es gewesen zu sein!!
Mach es überhaupt Sinn hier mit char zu arbeiten?
Macht es überhaupt Sinn mit Zahlen und C++ mit char zu arbeiten, oder sollte man diese Variable nur für Zechen verwenden?Hier meine Ausgabe!
1 2 3 4 5 6 7 8 9 a b c d e f101112131415161718;
191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30;
3132333435363738393a3b3c3d3e3f404142434445464748;
494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60;
6162636465666768696a6b6c6d6e6f707172737475767778;
797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90;
9192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8;
a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0;
c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8;
d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0;Eine Frage hätte ich noch!!!
kan man diese Zeile
1 2 3 4 5 6 7 8 9 a b c d e f101112131415161718;
in
0102030405060708090a0b0c0d0e0f101112131415161718;
umwandeln!Super Danke an alle !!!

Gruß
Stumpf
-
geht doch viel einfacher:
void to_hex (unsigned char *in, int len, char *out) { static char *hex = "0123456789abcdef"; while (len--) { *out++ = hex[*in>>4]; *out++ = hex[*in++ & 0x0f]; } *out = 0; }test:
#include <stdio.h> int main (void) { char in[] = {1,2,0xff,4,5, 0xab}; char out[256]; to_hex (in, sizeof(in), out); puts (out); }
-
Stumpf schrieb:
Eine Frage hätte ich noch!!!
kan man diese Zeile
1 2 3 4 5 6 7 8 9 a b c d e f101112131415161718;
in
0102030405060708090a0b0c0d0e0f101112131415161718;
umwandeln!macht z.b. mein code da^^

-
Ja wär auch eine Möglichkeit, hab's nun so gelöst.
Nochmal Danke !
if( uc_data_byte > 0xF ) { sstring_as_hex = uc_data_byte; sstr.str(""); sstr << hex << std::setw(2) << (int)uc_data_byte; sstring_as_hex = sstr.str(); } else { // Sonderbehandlung wegen der 0 am Anfang sstring_as_hex = uc_data_byte; sstr.str(""); sstr << '0'; sstr << hex << (int)uc_data_byte; sstring_as_hex = sstr.str(); }
-
nach dem hex und setw(2) einfach noch setfill('0') in den Stream, dann brauchst keine SOnderbehandlung
-
So das ist nun draus geworden.
Erst denkt man oh man (ich seh den Wald vor lauter Bäumen nicht
)
Und dann ist es ein zwei Zeiler
string ConvertCharToHexString( const unsigned char &uc ) { string sstring_as_hex; ostringstream sstr; sstr << hex << setw(2) << setfill('0') << (int)uc; sstring_as_hex = sstr.str(); return( sstring_as_hex ); }
-
ich würd aus dem Funktionsparameter stumpf ein unsigned char machen, meinetwegen mti const, aber ohne referenz. Die ist nämlich mit ziemlicher Sicherheit teurer anzulegen, als einfahc ein char zu kopieren. (Faustregel: primitive typen kopieren, rest per const reference übergeben)
-
OK Danke!