PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Speicherinhalt ausgeben [c++]


K21
12.10.2002, 13:10
Hi!
ich möchte unter c++ den inhalt des speichers bitweise ausgeben.
konkret:
ich habe eine variable
int i_wert = 0x8000CD02;
welche an der speicheradresse 0x22ff78 - 0x22ff7c steht.
Jetzt soll der Inhalt der Daten in den genannten Speicheradressen ausgegeben werden um in etwa folgendes Ergebnis zu bekommen:
10000000 00000000 11001101 00000010
Ich habe es bisher so gemacht dass ich den Wert direkt aus der Variable gelesen habe und es dann mit einem Maskierungsbyte:
mask=0x80000000;
"bearbeitet" habe:
(i_wert << i-1) & mask;
Lasse ich 32 Mal durchlaufen und bekomme auch das gewünschte Ergebnis (10000000 00000000 11001101 00000010).
Leider bekomme ich jetzt Probleme bei double-Werten.
Deswegen dachte ich wäre es praktischer gleich den Inhalt der Speicherstelle ausgeben zu lassen ... dann wäre es ja egal welcher Variablentyp überprüft werden muss.
Ich hoffe ich konnte mich einigermaßen verständlich machen :)

Über Tips und Hinweise würde ich mich freuen.

Greets,

K21


jenz
12.10.2002, 13:35
vielleicht so:

int size = sizeof(<deine variable>)/sizeof(char);
char *h = (char*) &<deine variable>;
for (int i = 0;i<size;i++) {
// hier jetzt *h bitweise ausgeben
h++;
}


fertig ;-)

K21
12.10.2002, 18:23
hmm naja ich weiss nicht ...
also irgendwie gehts wohl hauptsächlich darum...
char *h = (char*) &<deine variable>;
aber irgendwie.. naja so habe ich es bisher gelöst:

int i_wert = 0x8000CD02;
int shift, temp;
int mask = 0x80000000;
for (shift = 0; shift <= 31; shift++)
{
temp = (i_wert << shift) & mask;
if (shift % 8 == 0 && shift != 0)
cout << " ";
if (temp !=0)
cout << "1";
else
cout << "0";
}

naja klappt wie gesagt auch ...
aber leider leider kann ich es irgendwie nicht auf die speicheradresse umsetzen...
kein plan inwiefern mir deine zeile da weiterhelfen könnte aber bisher waren meine bemühungen vergebens :(

Malte 2
13.10.2002, 20:32
Oder mach es so:

void SpeicherinhaltAusgeben(void *mem, unsigned long int Bytes)
{
for (unsigned long int byte = 0; byte < Bytes; byte ++)
{
for (signed short int bit = 128; bit >= 1; bit /= 2)
{
if (mem[byte] & bit)
{
cout "1";
}
else
{
cout "0";
}
}
}
}

--------------------------------------------------------------------------

Wenn du dann eine double ausgeben willst:

SpeicherinhaltAusgeben(&doubleVariable, sizeof (double));