String in Hex umwandeln

Gast #3279280
Hallo,


ich hoffe ihr könntet mich helfen!

Ich habe folgendes Problem. Ich habe einen String und möchte diesen in 
eine byte (0xAC) quasi (hexdezimal format)konvertieren.

Mit sprintf, printf,sscanf das geht aber da nutz mir nicht.

Auf PC Seite mag das bestimmt einwandfrei funktionieren, aber ich muss 
das auch auf Mikrocontroller-Seite verwenden und da kann ich mir die 
Konvertierung mit sscanf,printf nicht leisten.

Zum Hintergrund:

Ich möchte Hexwerte in Edit-Felder eingeben und diese als 
byte-basierendes Protokoll in einem COM(Serielle) weiter senden.
Maxim schrieb:

> Ich möchte Hexwerte in Edit-Felder eingeben und diese als
> byte-basierendes Protokoll in einem COM(Serielle) weiter senden.

Na passt doch.
D.h. immer 2 char gehören zusammen und bilden 1 Hex-Ziffern.

D.h. du schreibst dir erst mal eine Funktion, die dir die Buchstaben 0 
bis 9, bzw. A bis F (gross- Kleinschreibung beachten) in die Zahlen 0 
bis 15 umsetzt.
1
uint8_t toBin( char Nibble )
2
{
3
  if( Nibble >= 'a' && Nibble <= 'f' )
4
    return Nibble - 'a' + 10;
5
 
6
  if( Nibble >= 'A' && Nibble <= 'F' ) )
7
    return Nibble - 'A' + 10;
8

9
  if( Nibble >= '0' && Nibble <= '9' )
10
    return Nibble - '0';
11

12
  return 0;
13
}

und damit ist es dann leicht aus 2 einzelnen Charactern, die du aus dem 
String rausholst, eine komplette Zahl zusammenzubauen
1
uint8_t byteToBin( char character1, char character2 )
2
{
3
  return toBin( character1 ) * 16 + character2;
4
}


Aus dem vom Benutzer eingegebenen String "A8", holst du dir die 
Character 'A' bzw. '8' raus, rufst byteToBin auf und von der Funktion 
kriegst du dann einen uint8_t mit genau dem Zahlenwert, der 0xA8 
entspricht.
Gast
Maxim schrieb:
> Ich möchte Hexwerte in Edit-Felder eingeben und diese als
> byte-basierendes Protokoll in einem COM(Serielle) weiter senden.

Wenn Du Dir klarmachst, welche Klimmzuege teilweise noetig werden, damit 
Du die Gueltigkeitspruefung perfekt bekommst, damit es keine Ueberlaeufe 
... gibt, kann es sein dass Du lieber den String weiterschickst.

wendelsberg
Gast
Eine Frage bitte noch.

Von PC Seite lese ich das String als (String *) und möchte ich diese 
umgewandelte String (in Hexadezimal) als ersten mit einem Terminal 
Programm Testen (in einem andere PC).

Mit der Verbindung funktioniert als richtig nun leider nicht i 
gewünschte Form (Hexadezimal).

Die Daten sind immer als String.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 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.