unsigned char zum speichern von float-daten
-
hallo!
ich habe folgendes gegeben:
unsigned char *pData;und möchte hier 1000 float werte speichern (pFloatData enhält float-werte, wobei die anzahl der werte nach beendigung der schleife 1000 ist):
pData = new char[1000*sizeof(float)]; const float *pFloatData; pFloatData = (const float *)FloatDataBlock(); while ... { pData += pFloatData; pFloatData++; }und zum testen wird das ganze auch wieder ausgelesen:
const unsigned char * ppData = pData; float fv; for (int i=0; i<1000; i++) { fv = *(const float *)ppData; printf("value: %f ", fv); ppData += sizeof(const float *); }das ganze läuft zwar, aber es werden falsche werte ausgegeben.
kann mir jemand bitte etwas weiterhelfen?
-
Die Zeile "pData+=pFloatData;" sieht irgendwie falsch aus (Pointer können normalerweise nur mit Ganzzahlen addiert werden). Wenn du die nächste float-Position in deinem Array ansprechen willst, nimm lieber "pData+=sizeof(float);"
(btw bin ich mir nicht sicher, ob sizeof(const float*) der richtige Erhöhungsschritt für die Ausgabe ist)
-
pData = pFloatData; pData += sizeof(const float);das ergebnis bleibt aber immer noch falsch.
-
pData zeigt zu Beginn auf einen unstrukturierten Block der Größe 1000*x, pFloatData auf ein Array von float-Werten. In der Schleife werden beide Zeiger stückweise durch ihre jeweiligen Arrays geschleift.
a) kopierst du in der Schleife überhaupt Daten zwischen den beiden Arrays?
b) Wenn du beim Lesen wieder von vorne anfangen willst, mußt du dir die Adresse des Blockanfangs merken:char* pData = new char[...]; char* pwData=pData; while(...) { ... pwData+=sizeof(float); }char* prData=pData; float fv; for (int i=0; i<1000; i++) { fv = *(const float *)ppData; printf("value: %f ", fv); ppData += sizeof(const float *); }
-
danke. ich mache es jetzt mit memcpy und jetzt funkt es.