Verständnisproblem



  • Hallo,

    ich habe der Zahlen in binären Form auszugeben. Dafür benutze ich die Funktion hexdump.

    std::string hexdump(void *array, size_t numBytes, unsigned int width) {
    	char *arr = (char*)array;
    	std::stringstream str;
    	str << std::hex;
    
    	for (size_t i=0; i<numBytes; i+=width) {
    		str << i << ' ';
    		for (unsigned int j=0; j<width; j++) {
    			if (i+j>=numBytes)
    				break;
    			str << (unsigned int)(arr[i+j]) << ' ';
    		}
    		str << ' ';
    		for (unsigned int k=0; k<width; k++) {
    			if (i+k>=numBytes)
    				break;
    			char c = arr[i+k];
    			if (c < 0x20 || c > 0x7f)str << '.'; else str << c;
    		}
    		str << '\n';
    	}
    	return str.str();
    }
    

    Der Ausgabe sollte mit folgenden Codeausschnit erfolgen:

    struct data
    {
    	unsigned char buffer[BUFFER_LENGTH];
    	 ...
    	unsigned int length;
    };
    printf("test%s\n", hexdump((void*)&data.buffer[0], data.length).c_str();
    

    Leider scheint es nicht ganz richtig zu funktionieren und ich finde keinen Fehler. Vielleicht kann mir jemand helfen.

    Vielen dank!


  • Mod

    Das passt hinten und vorne nicht zusammen, bitte lies dringend den ersten und den dritten Link in meiner Signatur gründlich durch.
    Was funktioniert nicht?
    Was passiert stattdessen?
    Was denkst du, sollte passieren?
    Wie sieht dein Code wirklich aus? Da fehlen momentan Klammern und Parameter und ein paar Definitionen. Das kann nicht einmal ein unvollständiger Ausschnitt aus einem regulären Programm sein.

    Allgemeine Tipps:
    Mische nie C und C++! Wenn du in C++ einen void* , einen reinterpret_cast oder sein C-Äquivalent (deine Zeilen 2, 11 und noch ein paar) oder einen der Header mit 'c' am Anfang (außer cmath und climit) oder .h am Ende braucht, dann machst du mit hoher Wahrscheinlichkeit etwas sehr falsch. Ebenso: Makros und rohe Arrays.

    Alle diese Dinge kommen in deinem Code vor. Nicht gut. Wundert mich nicht, dass da etwas nicht funktioniert, was auch immer du genau damit meinst.


Anmelden zum Antworten