NMEA Checksum

Gast #367799
Lesenswert?
• ▲
▼
Hallo.
Ich habe eine Checksumme berechnet, das Ergebnis muss aber aus 2
Characters bestehen. Dass heißt, ich will jedes Hexnibbel im Bereich
0...9 A...F aus meinem Ergebnis haben, damit ich es in einem Array in 2
Feldern speichern kann.

Im Prinzip:

char checksumme = 'F5';

char string[7]

string[5] = 'F'
string[6] = '5'

Wie bewerkstellige ich das am Besten?

Ich habe mir schon Gedanken gemacht, die Checksumme bitweise mit 0000
1111 bzw 1111 0000 zu verunden, um so jewils ein Nibbel auszublenden.
Das Ganze scheint mir jedoch sehr umständlich zu sein.

Hab noch eine Idee:

Geht das so:?

string[5] = (checksumme > 4);  //High nibble
string[6] = (checksumme < 4);  //Low nibble

Gruß Matthias
Gast #367801
Lesenswert?
• ▲
▼
Genau so hatte ich das gedacht, habe ich aber dann nicht das Problem,
dass ich dann in Buffer[0] das erste Nibble plus die 0 vom 2. Nibble
stehen habe? Das will ich nämlich nicht. Im Buffer[0] soll nur das
erste Nibble stehen zB F.
Gast #367802
Lesenswert?
• ▲
▼
> char checksumme = 'F5';

Meintest du nicht eher:

  char checksumme = 0xF5;

Wobei dieser Wert in einen char vermutlich nicht reinpasst, da dieser
Typ bei gcc in der Regel vorzeichenbehaftet ist und damit nur bis 0x7f
geht.

> Geht das so:?
>
> string[5] = (checksumme > 4);  //High nibble
> string[6] = (checksumme < 4);  //Low nibble

Da die Variable "string" heißt, nehme ich an, daß du Zeichen haben
willst. Dann geht das so nicht (aber sonst wäre es auch nicht
gegangen). Mal angenommen, du meintest nicht > und <, sondern >> und
<<: In string[5] steht nachher bei obigigem checksumme eine 16 (0xF)
drin und nicht das Zeichen 'F'. In string[6] steht 80 drin (0x50).

Etwa so könntest du es machen:

char digits[16] = "0123456789ABCDEF";
string[5] = digits[(unsigned char)checksumme >> 4];
string[6] = ditigs[checksumme & 0x0F];
Gast #367803
Lesenswert?
• ▲
▼
Klasse, so funktionierts.

Als Stringendzeichen will ich ein Carriage Return setzten,
(im ASCII Code 0x0D oder Dezimal 13). Wie bekomme ich das in ein Array
Feld hinein?

Und vielen Dank nochmal

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.