char to hex to int

OP #3599602
Lesenswert?
• ▲
▼
Hallo,

ich versuche einen Array von chars(z.B.: x = ['A', 'B', 'C', '1', 'F', 
'F']) in eine die Äquivalente Dezimalzahl umzuwandeln. Also F soll 
später 16 sein, B soll 11 sein usw.. atoi und der gleichen hilf mir ja 
nicht weiter, denn die geben mir nur die ASCII hex zahl z.B.: F ist dann 
41, was nicht so soll. Welche Methode gibt es dafür?
#3600808
Lesenswert?
• ▲
▼
DirkB schrieb:
> Um welche Programmiersprache geht es denn dabei?
Da der Thread im "GCC" Forum ist vermutlich C.
In C würde ich es so machen:
1
char character='B', zahl;
2
//....
3
//....
4
if(character<='9')
5
  zahl=character-'0';
6
else
7
  zahl=character-'A';   //oder zahl=character-'a'; wenn du mit Kleinbuchstaben arbeitest

Wenn du dir eine ASCII-Tabelle ansiehst kannst du den Code vllt. 
nachvollziehen:
http://neubert-volmar.de/Omega/Handbuch/ASCII-Tabelle.bmp
#3600832
Lesenswert?
• ▲
▼
Jürgen D. schrieb:
> Groß und Kleinbuchstaben unterscheiden sich nur durch ein Bit.
> Mit 0x20 "verodern" und man hat immer Kleinbuchstaben
Wusste ich noch nicht, habe mich noch nie so sehr mit ASCII beschäftigt. 
Werd ich mir merken, Danke :-)

Der Code würde dann so aussehen:
1
char character='B', zahl;
2
//....
3
//....
4
if(character<='9')
5
  zahl=character-'0';
6
else
7
  zahl=(character|0x20)-'a';
#3600853
Lesenswert?
• ▲
▼
Max H. schrieb:
> Jürgen D. schrieb:
>> Groß und Kleinbuchstaben unterscheiden sich nur durch ein Bit.
>> Mit 0x20 "verodern" und man hat immer Kleinbuchstaben
> Wusste ich noch nicht, habe mich noch nie so sehr mit ASCII beschäftigt.
> Werd ich mir merken, Danke :-)
>
> Der Code würde dann so aussehen:
>
1
> char character='B', zahl;
2
> //....
3
> //....
4
> if(character<='9')
5
>   zahl=character-'0';
6
> else
7
>   zahl=(character|0x20)-'a';
8
>


Fast.
Ich würde im Buchstabenfall noch 10 addieren. Denn sonst liefern '0' und 
'A' das gleiche Ergebnis.
1
    zahl = (character|0x20) - 'a' + 10;
#3600881
Lesenswert?
• ▲
▼
Ich würde einige Standardfunktionen aus ctype.h verwenden, ist meiner 
Meinung nach übersichtlicher. Zusätzlich würde ich die Funktion gegen 
falsche Übergabewerte absichern. Sowas in der Art (ungetestet):
1
int_fast8_t HexCharToInt(char ch){
2
  int_fast8_t Result = -1;
3

4
  if(isxdigit(ch)){
5
    if(isdigit(ch){
6
      Result = ch - '0';
7
    }
8
    else{
9
      Result = tolower(ch) - 'a' + 10;
10
    }
11
  }
12

13
  return Result;
14
}

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.