-         
Ergebnis 1 bis 5 von 5

Thema: Problem Char to long, littel Endian

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2008
    Ort
    Graz
    Beiträge
    508

    Problem Char to long, littel Endian

    Anzeige

    Ich will vom GPS Empfänger das UBX Protokoll auslesen, geht soweit das der Start von der Nachricht und Nachricht ID erkannt wird.
    Die Werte bekomme ich aber nicht heraus. Der Wert auf den ich aus bin besteht aus 4 Bytes im little Endian Format.

    Mein Problem: ich bekomme derzeit nichtmal ein einziges Byte umgewandelt.

    Probiert habe ich:
    Code:
    x[0]=gps_string[3+offset];x[1]= 0;
    temp=atoi(x);
    Temp ist aber immer Null (Ausgabe LCD mit itoa(temp,buffer,10);lcd_puts(buffer); )

    Ebenso probiert (die ersten 2 Byte würde mir genügen):
    Code:
    x[0]=gps_string[3+offset];
    x[1]=gps_string[2+offset];
    x[2]=0;
    
    pos_acc=atoi(x);
    und

    Code:
    x[0]=gps_string[3+offset];
    x[1]=gps_string[2+offset];
    x[2]=0;
    
    pos_acc=strtol(x, NULL, 10);
    Es kommt immer nur Null raus.
    Werte sollten zwischen 100-5000 liegen. Dazu lasse ich mir den 2D Accuracy Wert übers NEMA Protokoll ausgeben der ungefähr die gleiche Größenodung hat wie der 3D Wert den ich hier über ubx Protokoll auslesen will.


    Die ganze GPS Auswertung funktioniert bei mit mit atoi, warum hier nicht?

    Wie muss man das richtig umwandeln?

    Werte kommen vom GPS Empfänger raus, erstens werden die ersten 4 Bytes der Nachricht überprüft (2 Sync Char, 1 Byte Class, 1 Byte ID) um die richtige Nachricht zu erkennen, was ich mir anzeige lassen, und am uBlox Center kann man sich auch die Daten ansehen.

    LG!
    alles über meinen Rasenmäherroboter (wer Tippfehler findet darf sie gedanklich ausbessern, nur für besonders kreative Fehler behalte ich mir ein Copyright vor.)

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.487
    Ich würd das so machen:
    Code:
    int32_t wert;
    wert = gps[offset + 0];
    wert |= gps[offset + 1] << 8;
    wert |= gps[offset + 2] << 16;
    wert |= gps[offset + 3] << 24;
    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2008
    Ort
    Graz
    Beiträge
    508
    Danke, das schein zu funktionieren!

    Warum muss man hier nicht atoi() verwenden??? Dachte ich muss die Werte vom UART zuerst in Zahlen umwandeln und dann wieder neu in richtiger Reihenfolge zusammenbauen.
    alles über meinen Rasenmäherroboter (wer Tippfehler findet darf sie gedanklich ausbessern, nur für besonders kreative Fehler behalte ich mir ein Copyright vor.)

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.487
    Zitat Zitat von damfino Beitrag anzeigen
    Warum muss man hier nicht atoi() verwenden??? Dachte ich muss die Werte vom UART zuerst in Zahlen umwandeln und dann wieder neu in richtiger Reihenfolge zusammenbauen.
    UART ist hier unerheblich, das beschreibt nur den Datentransport nicht die Kodierung. atoi() heißt lang "ascii to integer", deine Daten sind aber nicht ASCII kodiert sondern binär, genauer 4 * 8 Bit binär, low Byte first. Und die werden in der richtigen Reihenfolge zusammengesetzt, an der richtigen Stelle in das 32 Bit int "hinein geodert".

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2008
    Ort
    Graz
    Beiträge
    508
    Jetzt habe ich es kapiert, stehe mit den Arten der Datenkodierung immer etwas auf Kriegsfuß bis ich es verstehe

    LG Werner
    alles über meinen Rasenmäherroboter (wer Tippfehler findet darf sie gedanklich ausbessern, nur für besonders kreative Fehler behalte ich mir ein Copyright vor.)

Ähnliche Themen

  1. Shift bei Long
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 03.07.2011, 16:49
  2. Little Endian -oder- Bin ich jetzt ganz bescheuert?
    Von Mauro im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 25.06.2010, 13:05
  3. Problem mit single double long
    Von bd239 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 29.05.2009, 08:06
  4. Umwandlung: int -> char*
    Von BurningWave im Forum C - Programmierung (GCC u.a.)
    Antworten: 13
    Letzter Beitrag: 20.07.2008, 19:36
  5. ASURO int und char
    Von falkenroby im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 15.03.2007, 21:15

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •