Forum: PC-Programmierung unsigned char Array --> float Array


von neuer (Gast)


Lesenswert?

Ich habe große Probleme mit dem konvertieren eines unsigned char Arrays 
in ein float Array:
1
float *x_to_float;
2
x_to_float=new float[500];
3
float fValue;
4
memcpy(x, x_uc, sizeof(float));

"x_uc" ist das unsigned char Array

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was erwartest Du? Was steht im char-Array, und was soll danach im 
float-Array stehen?

Dein Codefragment kopiert von x_uc nach x, was auch immer das sein mag. 
Weder "fValue" noch das Array "x_to_float" werden irgendwo verwendet; 
vielleicht ist auch das Dein Problem?

von Timmo H. (masterfx)


Lesenswert?

Ich denke du wirst nicht drumherum kommen für jedes element des Arrays 
einen Cast zu machen, damit mit einem memcpy, wie bereits gesagt, stumpf 
die Bits kopiert werden ohne zu beachten um welchen Datentyp es sich 
handelt.
Ein float besteht aus VORZEICHEN + EXPONENT + MANTISSE, ein unsigned 
char hingegen nur aus der Wertigkeit der Bits (2^7+2^6...+2^0). Die bits 
werden von jedem Datentyp unterschiedlich interpretiert, zumindest bei 
char,int,long... <=> float,double

von neuer (Gast)


Angehängte Dateien:

Lesenswert?

Ich benötige diese Konvertierung, weil ich von einem Graubild eine FFT 
berechnen will. Dem FFT Algorithmus muss man ein Array vom Datentyp 
float übergeben. Deshalb das ganze.

von Uhu U. (uhu)


Lesenswert?

Deswegen kannst du trotzdem nicht einfach Characters binär in den 
Speicherbereich einer Float-Variablen kopieren und hoffen, die würden 
dabei in das interne float-Format umgewandelt. memcpy kopiert einfach 
blind Bytes von der Quelle zum Ziel.

Wenn du in einen Kochtopf pinkelst, wird doch auch nicht plötzlich Suppe 
draus...

von neuer (Gast)


Lesenswert?

Das Problem hab ich gelöst. Das Array bildgrau ist nun vom Typ float.

Ich hab noch ein Problem mit der Anwendung des FFT Algorithmus.
1
//sample rate of the signal (must be 2^n)
2
long sample_rate=8192;
3
4
//number of samples you want to send for processing in the fft (any)
5
//for example 100 samples
6
long captured_samples=512;
7
8
//frequency of the signal (has to be smaller than sample_rate/2)
9
//for example 46
10
int frequency=100;
11
12
float data[512];

Diese Variablen "sample_rate, frequency" brauche ich doch eigentlich für 
die Bildtranformation nicht oder?

Die Berechneten Werte habe ich mal in eine Textdatei ausgegeben.
"fft.vektor[i,2]".
Vergleiche ich diese Werte mit Matlab, dann sind das ganz andere Werte.
Matlab Code: (Bildgröße: 256/256)
1
I=imread('bild.bmp')
2
g=rgb2gray(I)
3
f=fft(g)

Kann mir da jemand sagen was ich da falsch mache?

von neuer (Gast)


Angehängte Dateien:

Lesenswert?

Hier der FFT C-Code.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.