String in Hex umwandeln

Gast #3279280
Lesenswert?

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

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 #3279331
Lesenswert?

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 #3279384
Lesenswert?

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

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