integer byte-weise speichern
-
Eine integer Variable belegt ja 4 aufeinaderfolgende Byte im Speicher. Ich möchte jetzt diese vier Byte so wie sie im Speicher stehen in einen char-Array schreiben.
z.B. soll aus
int zahl = 80000;
folgender array werden
char array_zahl[4] = { 0 , 1 , 56 , 128 };
-
ich würd es in etwa so machen
geht wahrscheinlich noch besserchar array_zahl[4]; int zahl = 80000; int i=0; while(i<4){ array_zahl[i] = zahl & 0xff; zahl = zahl>>8; i++; }
!Ist nicht getestet
mfg
-
#include <iostream> using namespace std; union u { int i; unsigned char c[sizeof(int)]; }; int main() { u x; x.i = 80000; for (int i = 0; i < sizeof(int); ++i) { cout << static_cast<int>(x.c[i]) << endl; } }
-
es ist wichtig, ob du die byte order deines systems beibehalten willst oder nicht.
-
betrug schrieb:
es ist wichtig, ob du die byte order deines systems beibehalten willst oder nicht.
Ja ich will
-
@spjoe: würde funktionieren. nur sind die werte dann in der verkehrten reihenfolge im array gespeichert und mann muss sie umdrehen. -> aufwand.
werd ich nehmen wenn ich gar keine bessere lösung finde.@finix: elegante lösung aber ich bräuchte wirklich NUR den array ohne union.
ich hab auch schon mit zeigern rumexperimentiert aber keine passende lösung gefunden.
-
finix schrieb:
#include <iostream> using namespace std; union u { int i; unsigned char c[sizeof(int)]; }; int main() { u x; x.i = 80000; for (int i = 0; i < sizeof(int); ++i) { cout << static_cast<int>(x.c[i]) << endl; } }
oder so:
int main() { int x = 0x11121314; for (unsigned int i=0; i<sizeof(int); i++) printf ("%02x\n", *((char*)&x+i)); }
-
-=[P0I]=- schrieb:
@spjoe: würde funktionieren. nur sind die werte dann in der verkehrten reihenfolge im array gespeichert und mann muss sie umdrehen. -> aufwand.
-=[P0I]=- schrieb:
betrug schrieb:
es ist wichtig, ob du die byte order deines systems beibehalten willst oder nicht.
Ja ich will
Google mal nach "[little|big] endian"...
-
finix schrieb:
Google mal nach "[little|big] endian"...ok, ok. in meinem beispiel isses verkehrt rum. aber es is ja auch nur ein beispiel
-
net, deine lösung ist die die ich gesucht habe: mit zeigern
unsigned char array_zahl[4]; int zahl = 80000; int i; for(i = 0 ; i < 4 ; i++ ) { array_zahl[i] = *((char*)&zahl + i) ; }
thx to all
-
-=[P0I]=- schrieb:
unsigned char array_zahl[4]; int zahl = 80000; int i; for(i = 0 ; i < 4 ; i++ ) { array_zahl[i] = *((char*)&zahl + i) ; }
aber mach aus den 4'en lieber sizeof(int) sonst geht's z.b. nicht unter dos weil für die meisten compiler da ist sizeof(int) == 2
btw: warum nimmste nicht memcpy oder*(int*)array_zahl = i;
-
Was bringt dir das, wenn du jedes byte in einem char-Array speicherst??
MfG CSS
-
@ net: mach ich schon, keine sorge. mir gings jetzt nur um die technik.
@ css: ich muss bestimmte werte in eine datei schreiben. jetzt wirst du sagen dass man das ja gleich direkt machen kann und dass des einfacher is. stimmt. aber ich muss des zeug noch bearbeiten. also alles was in der datei in reinform drinstehen würde. also hau ich des in den speicher so wie's in der datei drinnen wär. hier kann ichs dann verschlüsseln und in die datei gleich verschlüsselt reinschreiben.
-
-=[P0I]=- schrieb:
net, deine lösung ist die die ich gesucht habe: mit zeigern
unsigned char array_zahl[4]; int zahl = 80000; int i; for(i = 0 ; i < 4 ; i++ ) { array_zahl[i] = *((char*)&zahl + i) ; }
thx to all
warum so umständlich?
unsigned char array_zahl[4]; int zahl = 80000; memcpy( array_zahl, &zahl, sizeof ( array_zahl ) );
-
Sovok schrieb:
[
warum so umständlich?unsigned char array_zahl[4]; int zahl = 80000; memcpy( array_zahl, &zahl, sizeof ( array_zahl ) );
warum so umständlich?
unsigned char array_zahl[4]; int zahl = 80000; *(int*)array_zahl = zahl;
-
net schrieb:
warum so umständlich?
unsigned char array_zahl[4]; int zahl = 80000; *(int*)array_zahl = zahl;
Mittlerweile bin ich auch auf diese lösung gekommen.