uint8_t* konvertieren

Gast #1655101
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.
#1655120
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
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
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
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
Ü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
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:
Gast #1656555
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?
#1656571
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
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.