Hallo Experten, Wie kann ich ein uint8_t* in ein double umwandeln. Danke schon im Vorraus, mfg Patrick
Ein Codeschnipsel: uint8_t x_uint; uint8_t * p_x_uint = & x_uint; double x_double = (double) p_x_uint; Viel Erfolg Bernhard
Durch casting. (Ohne jetzt deinen Controller Umgebung Programmiersprache zu kennen)
1 | double val = (double)(*u_val); |
Patrick Schaffler schrieb:
> Wie kann ich ein uint8_t* in ein double umwandeln.
Wenn du die Frage nicht richtig (oder wenigstens ausfuehrlich)
formulierst, wirst du nur falsche Antworten bekommen.
Möglicherweise suchst du auch so eine Funktion wie strtod http://www.imb-jena.de/~gmueller/kurse/c_c++/c_str2n.html http://www.opengroup.org/onlinepubs/000095399/functions/strtod.html
Patrick Schaffler schrieb: > Hallo Experten, > > Wie kann ich ein uint8_t* in ein double umwandeln. Ich kann mir beim besten Willen nicht vorstellen, dass du einen Pointerwert in einen double umwandeln willst. Ich könnte mir aber vorstellen, dass du * einen String hast, das in einem uint8_t Array abgelegt ist und du den double benötigst, der dieser Text-Repräsentierung entspricht Also: "123.4" -> 123.4 strtod ist hier dein Freund * tatsächlich einen Wert ausgerechnet hast, der jetzt in einem uint8_t steht, du einen Pointer darauf hast, und du jetzt diesen Wert als double benötigst. uint8_t x = 256 / 3; uint8_t* p_x = &x; double value = *p_x; Also: Was ist es?
Mein Kompasssensor liefert mir über den I2C-Bus einen Wert (uint8_t*) zurück. Damit ich diesen Wert weiterverarbeiten kann muss ich ihn jedoch umwandeln. Der Quellcode des Programmes ist in C++ geschrieben. Ich habe nur recht wenig ahnung in diesem Themengebiet und bitte euch daher mir genaue Angaben und eine genaue Erklärung zu geben.
Patrick Schaffler schrieb:
> liefert mir über den I2C-Bus einen Wert (uint8_t*)
über ein bus kann bestimmt kein Zeiger ankommen. Zeig uns doch mal den
Quellcode von der STelle an der du die Daten von dem I2C Bus bekommst.
Patrick Schaffler schrieb: > Mein Kompasssensor liefert mir über den I2C-Bus einen Wert (uint8_t*) > zurück. Dein Kompassensor liefert alles mögliche. Aber mit Sicherheit keinen uint8_t* Du magst vielleicht im Datenblatt des Sensors eine Funktion gesehen haben, die die Kommunikation mit dem Sonsor abwickelt. Und diese Funktion hat einen uint8_t* als Parameter. Das bedeutet dann in diesem Zusammenhang, dass du einen uint8_t (ohne den *) bereitstellen musst, und diese Adresse dieses uint8_t der Funktion übergeben musst, damit diese den ausgelesenen Wert dort hineinschreiben kann. Normaler C/C++ Übergabemechanismus: Call per 'Referenz', indem ein Pointer auf die Zielvariable übergeben wird. (Nicht zu verwechseln mit C++ Referenzen) Das kann so sein. Muss aber nicht. Beende endlich das Rätselraten und zeig deinen Code.
Über dem I2C-Bus wird folgendens gesendet: void send(uint8_t address, uint8_t data); void send(uint8_t address, uint8_t* data, int length); void get(uint8_t address, uint8_t* data, int length); Ich brauche den Wert welcher in data steht. Und dieser ist vom Typ uint8_t*. Oder bin ich falsch informiert?
>Ich brauche den Wert welcher in data steht. Und dieser ist vom Typ >uint8_t*. Dir fehlen C-Grundlagen.
Quellcode: #include "qfixSoccerBoard.h" #include "qfixI2C.h" SoccerBoard board; I2C I2C; int main() { double richtung; uint8_t* data; i2c.send(192, 1); //192-Kompassadresse, 1-Register i2c.get(192, data, 1); //Auslesen unter "data" richtung = data/0.70833; //zur weiterverarbeitung nötig } Im Anhang befindet sich noch die Headerdatei des I2C_Busses.
jetzt bitte noch das Datenbaltt von den Sensor, denn man kann nicht erkennen wie viele bytes von den Sensor gesenet werden. Welchen wert setzt du denn bei length ein?
Patrick Schaffler schrieb: > Über dem I2C-Bus wird folgendens gesendet: > > void send(uint8_t address, uint8_t data); > void send(uint8_t address, uint8_t* data, int length); > void get(uint8_t address, uint8_t* data, int length); > > Ich brauche den Wert welcher in data steht. Und dieser ist vom Typ > uint8_t*. > Oder bin ich falsch informiert? Du bist falsch informiert. Die Benutzung ist so gedacht
1 | int main() |
2 | {
|
3 | uint8_t data[40]; |
4 | |
5 | |
6 | get( 192, data, sizeof(data) ); |
7 | }
|
Ganz normaler C Übergabemechanismus im Falle von Arrays. Ob die 40 ausreichen oder nicht, kann man so nicht sagen. Das musst du dir aus dem Datenblatt raussuchen, wieviele Bytes der Sensor wirklich sendet.
nach lesen des Datenblattes würde ich sagen das es so gehen müsste
1 | int main() |
2 | {
|
3 | double richtung; |
4 | uint8_t data; |
5 | i2c.send(192, 1); //192-Kompassadresse, 1-Register |
6 | i2c.get(192, &data, 1); //Auslesen unter "data" |
7 | |
8 | |
9 | richtung = (double)data/0.70833; //zur weiterverarbeitung nötig |
10 | }
|
Die nächste Frage ist ob du wirklich glücklich mit dem Double wirst.
Peter schrieb: > int main() > { > double richtung; > uint8_t data; > i2c.send(192, 1); //192-Kompassadresse, 1-Register > i2c.get(192, &data, 1); //Auslesen unter "data" > > > richtung = (double)data/0.70833; //zur weiterverarbeitung nötig > } Danke Peter! Wenn ich das Programm so ausführe funktioniert es.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.