Forum: PC-Programmierung C: Cast von Int16 (short) in float (double) eines Zeigers


von Pascal O. (raven761)


Lesenswert?

Hi,

folgens mache ich:
1
float G1, G_inc, tmpwert;
2
Int16 *current_in, *current_out;
3
Int16 Buffer[100], k;
4
5
current_in = Buffer;
6
7
tmpwert = (float)current_in[i] *(G1-G_inc*k);
8
current_out[i] = (Int16)tmpwert;

Der Code ist vereinfacht dargestellt.

So, mein Problem ist, dass ich in tmpwert falsche Werte erhalte. Ich 
möchte die Berechnung so vornehmen, dass der Anfangszeiger von Buffer in 
current_in kopiert wird und ich mittels current_in die Multiplikation 
mit den float Werten vornehme. Damit dies geht, muss ich den Wert von 
Buffer jedoch casten als float. Aber es geht nicht!

Kann es sein, dass ich durch meine Methode den Zeiger selber caste? 
Müsste ich es dann so umschreiben?
1
tmpwert = current_in[i];
2
tmpwert = tmpwert *(G1-G_inc*k);
3
current_out[i] = (Int16)tmpwert;

Ich danke euch für eure Antworten! Kann den Code leider nicht 
überprüfen, hab mein DSP Board net da :-/

Gruß, Pascal

von Vlad T. (vlad_tepesch)


Lesenswert?

an dem Code ist doch nix hardwareabhängiges drin.
probiers doch mal mit einem normalen c-compiler

mit dem bisschen code, was du hier vorwirfst kann man nichs sagen.

bis auf eine wird keine der Variablen initialisiert, i gar nicht erst 
deklariert.



prinzipiell sollte die berechenung ok sein, wenn du sicher gehen willst, 
setze doch einfach klammern.

tmpwert = ((float)(current_in[i])) *(G1-G_inc*k);

von Klaus W. (mfgkw)


Lesenswert?

Der cast ist inklusive der Klammern überflüssig, aber eigentlich egal

von Pascal O. (raven761)


Lesenswert?

Hat sich erledigt, war ein ganz anderes Problem! Danke trotzdem :-)

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.