speichern von DWORD -> BYTE*, ...
-
Hi zusammen,
folgendes Problem: Wie speichere ich den Inhalt eines DWORD( und WORD ) in einen Bytepuffer? Und lese ihn auch wieder zurück?
folgendes:
es geht darum, Daten binär zu speichern. z. B. sowas:
char* outBuffer; ... WORD __fastcall SaveToBuff( BYTE* buff, AnsiString txt, WORD w ) { int i; for (i = 1; i <= txt.Length(); i++) { (*buff) = aIdx[i]; buff++; }// soweit noch alles klar, aber ... //... wie packe ich jetzt das WORD da rein? ??? } Aufruf mit: WORD len = SaveToBuff( outBuffer, "hallo", 288 ); // werden Variablen
übergeben, nur zwecks Einfachheit
das ganze dann auch noch mit DWORD statt WORD?!
Hab schon Google und SuFu bemüht, aber
thx schonmal
grüssle
-
Hallo
So ganz versteh ich den Sinn nicht, aber technisch sieht das z.B. so aus :
int bytes = sizeof(w) BYTE* wb = reinterpret_cast<BYTE*>(&w); for (int lv = 0; lv < bytes; lv++) { (*buff) = *wb; buff++; wb++ }
w kann nun ein beliebiger Plain Old Datatype sein.
Die Schleife kannst du grundsätzlich auch mit einem memcopy ersetzen, ebenso wie beim kopieren des Strings.bis bald
akari
-
thx akari,
habs jetzt mal so, und mit memcpy versucht. Nur verifizieren kann ichs leider nicht, da es am lesen scheitert.
...
BYTE* inBuffer;
DWORD* in;
...for( int i = 0; i < 4; i++ )
{
aus dem BYTE* dann wieder das DWORD lesen???
}Datenverwaltung hiess bei mir bis jetzt eigentlich alles vom Textfile bis zu Oracle, das ist Neuland für mich( hat zwar nichts mit der Konvertierung zu tun, aber jetzt werde ich quasi erstmalig dazu gezwungen. Davor konnte ich es umgehen ).
grüssle
-
Hallo
Da brauchst du keine Schleife oder memcopy
Word w; // Ziel BYTE* inBuffer; // Ursprung Word* buf; // Zwischenspeicher buf = reinterpret_cast<Word*>(inBuffer); w = *buf; inBuffer += sizeof(w);
Auch hier kann nun w von einem beliebigen POD-Datentype sein.
bis bald
akari
-
Geht´s dir darum, verschiedene Datentypen in´s RAM zu serialisieren? Dazu könntest du auch TMemoryStream oder std::vector<char> benutzen.