VC++ Dezimalzahl in hex und umgekehrt

Hallo,

ich versuche gerade mit VC++ 2008 zwei Funktionen in einer DLL zu erstellen.
Die erste Funktion soll eine Dezimalzahl in eine Hexadezimalzahl schreibt.
Bei der zweiten Funktion soll eine Hexadezimalzahl in eine Dezimalzahl umgewandelt werden, so, dass ich in der Funktion noch mit ihr weiter rechnen kann(sprich als integer)

Jemand eine Idee, wie er mir helfen könnte?

Mit dankenden Grüßen im Voraus

Johannes

Hallo

ich versuche gerade mit VC++ 2008 zwei Funktionen in einer DLL
zu erstellen. Die erste Funktion soll eine Dezimalzahl in eine
Hexadezimalzahl schreibt umwandeln.
Bei der zweiten Funktion soll eine Hexadezimalzahl in eine
Dezimalzahl umgewandelt werden, so, dass ich in der Funktion
noch mit ihr weiter rechnen kann(sprich als integer)
Jemand eine Idee, wie er mir helfen könnte?

Das geht nicht so wie Du das vermutest. Berechnungen
erfolgen weder im Dezimal- noch im Hexadezimalsystem
sondern im „Binärsystem“.

Was Du machen kannst, ist

* eine als Text vorliegende Dezimalzahl in das interne
  (Binär-)Format umwandeln:

 int i = <u>12345</u>;
 ...
 i = atoi("<u>12345</u>");
 ...
 usw.

* eine als Text vorliegende Hexadezimalzahl in das interne
  (Binär-)Format umwandeln:

 int i = <u>0xA1B2C3</u>;
 ...
 sscanf("<u>A1B2C3</u>", "%x", &i);
 ...
 usw.

Für jede Konversion gibt es noch andere Varianten,
insbesondere in C++ (hoffentlich habe ich Deine Frage
richtig verstanden).

Viele Grüße

CMb

Hallo

danke erstmal für deine antwort.

ich war natürlich nicht ganz untätig und hab da mal was versucht:

char* alpha=„0123456789ABCDEF“;

int dez(char hex[])
{

sErgDez=0;
len=strlen(hex);
lenalpha=strlen(alpha);
faktor=1;
for(i=0;i

1 Like

ups verschrieben… natürlich in der letzten zeile:
return sErgDez;

1 Like

Hossa :smile:

Zum Umwandeln einer Dezimalzahl in eine Hexadezimalzahl kannst du die Bibliotheksfunktion sprintf verwenden:

sprintf(zielPuffer, "%X", dezimalZahl);

Wenn dir das nicht genügt, kannst du es auch leicht und schnell selber implementieren:

void int2hex(char \*dest, unsigned long num)
{
 char tempBuffer[100];
 char \*temp= tempBuffer;
 int digit;
 if (0==num) \*temp++='0';
 while (num\>0)
 { digit= static\_cast(num%16);
 \*temp++= digit tempBuffer ) \*dest++= \*--temp;
 \*dest= '\0';
 return;
}

Die Rückumwandlung ist ähnlich simpel:

unsigned long hex2int(char \*source)
{
 unsigned long res=0;
 int digit;
 while (\*source)
 { digit= static\_cast(\*source++);
 if (digit\>='a') digit-= 'a' - 10; 
 if (digit\>='A') digit-= 'A' - 10;
 res= 16\*res+digit;
 }
 return res;
}

Viele Grüße

Hasenfuß