uint8_t* konvertieren

#1655120
Lesenswert?

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?
OP #1656525
Lesenswert?

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.
Gast #1656534
Lesenswert?

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.
#1656536
Lesenswert?

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.
OP #1656543
Lesenswert?

Ü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?
OP #1656554
Lesenswert?

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.
Angehängte Dateien:
#1656571
Lesenswert?

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.
Gast #1656579
Lesenswert?

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.
OP #1656590
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren