PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C] Hex <> Int Umrechnen ...


DraconiX
2010-03-18, 19:46:27
So, ich habe ein ganz peinliches Problem :freak:

Ich habe eine 1Byte Char Variable mit einem Hex-Wert von sagen wir mal 0x9F - was ja Decimal 159 sind - dieses brauche ich als Integervariable?! Wie stelle ich das am dümmsten an?!

Im Netz findet man viele Sachen wie man ein Char Array in Decimal umwandeln kann ala:

Integer = xtoi("3F")

jedoch nicht wie man eine 1Byte Hex Variable umrechnet?!

huha
2010-03-18, 19:50:21
Hä?

Es ist C. Da castest du das Ding entweder nach int, wenn du es unbedingt willst, oder addierst es einfach auf deinen int drauf. Fertig.

Allerdings aufpassen, daß dein char ggf. ein unsigned char ist, sonst gibt's Probleme.
0x59 ist übrigens (89)10, (159)10 wäre 0x9F -- aber nur als unsigned char, als signed char gibt's was lustiges Negatives.


-huha

noid
2010-03-18, 19:55:21
Hä?

Es ist C. Da castest du das Ding entweder nach int, wenn du es unbedingt willst, oder addierst es einfach auf deinen int drauf. Fertig.

Allerdings aufpassen, daß dein char ggf. ein unsigned char ist, sonst gibt's Probleme.
0x59 ist übrigens (89)10, (159)10 wäre 0x9F -- aber nur als unsigned char, als signed char gibt's was lustiges Negatives.


-huha

Richtig, die Repräsentation ist ja wurscht. Ob 0xA oder 10 - kannst du halten wie du Kleingeld hast.
Wenn du das Ausgeben willst, dann solltest du dich einfach mal nach der Funktionalität deiner Ausgabe Bib erkundigen.

(und wenn du schon nach int castest, dann definiere dir bitte eine Datentyp, der jeweils in einem Header je nach Zielsystem angepasst ist. Willst du 2byte vorzeichenlose Zahlen verwenden, dann ist dein Zielsystem entscheidend... Vllt noch darauf zu achten constanten immer (!) explizit zu casten. Oder bei Vergleichen verschd. Datentypen.)

Gast
2010-03-18, 19:56:46
Irgendwie verstehe ich nicht ganz, wo da das Problem liegt.

Es ist doch vollkommen egal, ob eine 1 Byte char Variable den Wert 0x59 oder 159 hat. Das ist binär vollkommen gleich und nur eine andere Schreibweise. Hier reicht einfach ein:
int intvalue = charvalue;

Oder hast du ein Char Array mit den Zeichen '0', 'x', '5' und '9'
In diesem Fall kannst du dir ja schnell selbst eine kleine Funktion basteln, die einfach die ersten zwei Zeichen ignoriert und dann einfach den Wert berechnet so ca. in der Form:

for(i=0;i<laenge;i++)
{
wert = wert*16
if(feld[i]<='9' && feld[i]>='0')
{
wert += feld[i]-'0';
continue;
}

if(feld[i]<='f' && feld[i]>='a')
{
wert += feld[i]-'a'+10;
continue;
}


if(feld[i]<='F' && feld[i]>='A')
{
wert += feld[i]-'A'+10;
continue;
}
}

noid
2010-03-18, 20:02:16
Irgendwie verstehe ich nicht ganz, wo da das Problem liegt.

Es ist doch vollkommen egal, ob eine 1 Byte char Variable den Wert 0x59 oder 159 hat. Das ist binär vollkommen gleich und nur eine andere Schreibweise. Hier reicht einfach ein:
int intvalue = charvalue;

Oder hast du ein Char Array mit den Zeichen '0', 'x', '5' und '9'
In diesem Fall kannst du dir ja schnell selbst eine kleine Funktion basteln, die einfach die ersten zwei Zeichen ignoriert und dann einfach den Wert berechnet so ca. in der Form:

for(i=0;i<laenge;i++)
{
wert = wert*16
if(feld[i]<='9' && feld[i]>='0')
{
wert += feld[i]-'0';
continue;
}

if(feld[i]<='f' && feld[i]>='a')
{
wert += feld[i]-'a'+10;
continue;
}


if(feld[i]<='F' && feld[i]>='A')
{
wert += feld[i]-'A'+10;
continue;
}
}

anstatt eines solchen Codes (der sogar Groß- und Kleinschreibung beachtet ;)) kann man auch auf libs zurückgreifen:
http://en.wikipedia.org/wiki/Scanf

DraconiX
2010-03-18, 20:39:52
Ähmm... ja... ich bin wat doof :freak:

Klar kann ich ganz normal als int, short, hat die Welt noch nicht gesehen ausgeben. Manchmal sieht man echt den Wald vor Bäumen nicht mehr.