HEX nach ASCII konvertieren

Sotares

Mitglied
Guten Tag allerseits.

Wie kann ich unter C einen Hexadezimalwert nach ASCII konvertieren?
z.B: FF = 255 soll ergeben

Umgekehrt scheint es ja zu gehen:
Code:
unsigned char h={255};                
printf("%X",h);

Danke und Gruss,
Sotares
 
Hex nach ascii geht nicht weil Hex ist ein mathematisches System und ASCII ist ein Zeichensatz. Dein Beispiel erfordert die umwandlung von Hexadezimalsystem nach Dezimalsystem. Dazu gibts viele möglichkeiten das umzurechnen.
Benutz einfach mal die Suchen Funktion, wenn ich das richtig gesehen hab gabs dazu nämlich hier schon ein paar programme
 
:)
Natürlich Dezimalsystem und nicht ASCII.
Wo hab ich nun meinen Kopf auch wieder!

Leider konnte mir die Suchfunktion nicht weiterhelfen da ich weder mit hex oder dezimal etwas gefunden habe.

Sotares
 
Zuletzt bearbeitet:
Vielleicht nicht der beste Algorithmus, aber mehr ist mir eben nicht eingefallen :):
Code:
  //Zahl zum Umwandeln
  int zahl = 256;

  //Ergebnisstring
  char hexstring[20];

  //Algorithmus

  //Hilfsvariablen
  char tempstring[20];
  int temp = zahl;
  memset(tempstring,0,20);    
  char hexbytes[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

  for (int i = 0;;i++)
  {
    if (temp == 0) break;
    tempstring[i] = hexbytes[temp%16];    
    temp /= 16;
  }

  //String umdrehen
  for (int i = 0; i < strlen(tempstring); i++)
  {
    hexstring[i] = tempstring[strlen(tempstring)-i-1];
  }
  hexstring[strlen(tempstring)] = 0;

  //fertig

  printf("%i wird zu 0x%s\n",zahl,hexstring);
 
Zuletzt bearbeitet:
Ich merke hier gerade, dass ich das Thema verfehlt habe. Hab genau das Gegenteil gepostet... sorry. :rolleyes:
 
mir ist das ganze noch nicht klar - sollen Stringräpresentationen ineinander umgewandelt werden? Oder soll eine int in Hex nach einer int in dezimal umgewandelt werden?

Falls String:
- Eingabeformat:
- Ausgabeformat:
 
Habe letzte Nacht was zusammengebastelt, nachdem ich hier
nachgelesen habe, nach welchen mathematischen Regeln das Hexadezimalsystem aufgebaut ist.



Code:
#include <stdio.h>
#include <stdlib.h>

int main()
{

char hex[]="FF";


int hex_t1=0, hex_t2=0, hex_to_dez=0, zahl1=0;


if(hex[0]>=65 && hex[0]<=70)
{
    switch(hex[0])
      {
      case 65: hex_t1=10;
      break;
      case 66: hex_t1=11;
      break;
      case 67: hex_t1=12;
      break;
      case 68: hex_t1=13;
      break;
      case 69: hex_t1=14;
      break;
      case 70: hex_t1=15;
      break;
      }    
    
} 

else
{
switch(hex[0])
      {
      case 48: hex_t1=0;
      break;
      case 49: hex_t1=1;
      break;
      case 50: hex_t1=2;
      break;
      case 51: hex_t1=3;
      break;
      case 52: hex_t1=4;
      break;
      case 53: hex_t1=5;
      break;
      case 54: hex_t1=6;
      break;
      case 55: hex_t1=7;
      break;
      case 56: hex_t1=8;
      break;
      case 57: hex_t1=9;
      break;
      }    
}    






if(hex[1]>=65 && hex[1]<=70)
{
    
switch(hex[1])
      {
      case 65: hex_t2=10;
      break;
      case 66: hex_t2=11;
      break;
      case 67: hex_t2=12;
      break;
      case 68: hex_t2=13;
      break;
      case 69: hex_t2=14;
      break;
      case 70: hex_t2=15;
      break;
      }    

}    

else
{
switch(hex[1])
      {
      case 48: hex_t2=0;
      break;
      case 49: hex_t2=1;
      break;
      case 50: hex_t2=2;
      break;
      case 51: hex_t2=3;
      break;
      case 52: hex_t2=4;
      break;
      case 53: hex_t2=5;
      break;
      case 54: hex_t2=6;
      break;
      case 55: hex_t2=7;
      break;
      case 56: hex_t2=8;
      break;
      case 57: hex_t2=9;
      break;
      }    
}    




hex_to_dez=((hex_t1 * 16)+ hex_t2);
printf("%d\n", hex_to_dez);



  system("PAUSE");	
  return 0;
}

Nun, ich wollte eigentlich bei den "else" Abfragen ein atoi machen statt dem switch konstrukt, um das char in ein int zu konvertieren.
Leider schmiert mir das Programm ab, vermutlich lässt sich ein atoi nicht auf einen teil des arrays anwenden. (Newbie Fehler?)

Code:
zahl1=atoi(hex[0]);

Hingegen:
Code:
zahl1=atoi(hex);
funktioniert.

Grüsse,
Sotares
 
atoi erwartet einen pointer - hex[0] ist ein char, hex ein char*.

Ein paar strukturelle vorschläge:

Mach dir doch eine Prozedur

int hexToInt (char c) {
switch (c) {
case "0": return 0;
case "1": return 1;
...
default: return -1;
}

damit bekommst du aus jedem einzelnen char eine int. Zusammensetzen ist dann einfach:

int zahl=hexToInt(hex[1])*16+hexToInt(hex[0]);

oder du nimmst einfach:

http://www.mkssoftware.com/docs/man3/strtol.3.asp

Basis auf 16 stellen und fertig.

P.S: Google ist dein Freund. Rede mit ihm, frag ihn Sachen. Er wird es dir Danken.;)
 
Zuletzt bearbeitet:
Danke, gute Sache mit der Prozedur :)


Code:
#include <stdio.h>
#include <stdlib.h>

int main()
{

char hex[]="FF";
int HexToDez=0;



int HexToInt(char c) 
{
    switch (c) 
    {
    case 48: return 0;
    case 49: return 1;
    case 50: return 2;
    case 51: return 3;
    case 52: return 4;
    case 53: return 5;
    case 54: return 6;
    case 55: return 7;
    case 56: return 8;
    case 57: return 9;
    case 65: return 10;
    case 66: return 11;
    case 67: return 12;
    case 68: return 13;
    case 69: return 14;
    case 70: return 15;    
    case 97: return 10;
    case 98: return 11;
    case 99: return 12;
    case 100: return 13;
    case 101: return 14;
    case 102: return 15;
    
    }
}




HexToDez=(HexToInt(hex[0])*16+HexToInt(hex[1]));
printf("%d\n", HexToDez);


  system("PAUSE");	
  return 0;
}


P.S: Ich bin schon fast mit Google verheiratet!

- Sotares
 
würde das
Code:
HexToDez=(HexToInt(hex[0])*16+HexToInt(hex[1]));

noch zu dem abändern, damit du nicht nur auf 2 stellige Zahlen beschränkt bist:
Code:
HexToDez = 0;
for (int i = 0; i < strlen(hex); i++)
{
  HexToDez = HexToDez*16+HexToInt(hex[i]);
}
 
Zurück