2009-08-17 5 views
3

Ich verwende einen Zeiger, um eine Art "shared memory" zu spezifizieren, die ich verwende, um Daten zwischen verschiedenen Prozessen/Threads auszutauschen. Jetzt möchte ich einen Hex-Dump des Inhalts des freigegebenen Puffers haben. Weiß jemand, wie man das macht?Hex-Speicherauszug vom Speicherort

Dank, R

+1

Fragen Sie, wie Sie eine universelle Hex-Dump-Funktion schreiben? –

+0

Grob gesagt, würde ich so sagen;). Grundsätzlich würde ich gerne wissen, wie ich die Inhalte an einem bestimmten Speicherort ausgeben kann, ohne zu wissen, um welchen Typ es sich handelt. –

Antwort

13

Nutzung wirft, natürlich :-) Die Funktion etwas sollte wie folgt aussehen: in Gebrauch

void Dump(const void * mem, unsigned int n) { 
    const char * p = reinterpret_cast< const char *>(mem); 
    for (unsigned int i = 0; i < n; i++) { 
    std::cout << hex << int(p[i]) << " "; 
    } 
    std::cout << std::endl; 
} 

Dann:

Foo * f = GetSharedFoo(); 
Dump(f, somesize); 

wo somesize ist, wie viel wollen Sie dump.

+1

Ich habe gerade in meinen Werkzeugkasten geschaut. Mine fügt auch einen 'std :: setw (2) << std :: setfill (os.widen ('0'))' in den Stream ein. Aber das könnte daran liegen, dass ich in einen Stream mit beliebiger Zeichenbreite schreibe. – sbi

+0

Ja, das Einstellen von Breite und Polsterung ist eine gute Idee, wurde aber schon mehrmals hier besprochen - ich konzentrierte mich auf das Gießen des Dings. –

+4

Eine andere erwähnenswerte Sache ist, dass Sie wahrscheinlich auf 'const unsigned char *' umwandeln sollten, um zu vermeiden, dass 'ff'-Werte in der nachfolgenden int-Umwandlung auf' ffffffff' erweitert werden. – Rawler