sehr dringend, eine HEX Zahlt zu Dezimalzahl machen

Reticent

Erfahrenes Mitglied
Hallo,


kann mir jemand helfen? Ich habe schon sehr lange gesucht und viele möglichkeiten ausprobiert. Leider geht es bei mir nicht.

ich brauche so eine Zahl "010421DD82" (kein String sonder als Byte[5] gegeben) wieder in dezimal verwandeln und dann als String speichern. Was ich auch mache stürzt mein Progi ab.

meine Versuche:
Code:
char *GetHEX(unsigned long x)
{
	if(!x)
		return("0");

	short len=short(ceil((double)log((double)(x+1))/(double)log((double)16))-1);
	char *HEX="0123456789ABCDEF";
	char *result=new(char[len+2]);
	result[len+1]='\0';

	for(;len>=0;len--,x/=16)
	 result[len]=HEX[x%16];

	delete []HEX;
	return(result);
}

__int64 hex_string_to_long(CString hexStg)
{
  int n= 0;				 // position in string
  __int64 intValue = 0;  // integer value of hex string
  CUIntArray digit;		 // hold values to convert

  //tokenize all digits to an array containing their value
  while (n < hexStg.GetLength())
  {
     if (hexStg[n]=='\0')
        break;
     if (hexStg[n] > 0x29 && hexStg[n] < 0x40 ) //if 0 to 9
        digit.Add(hexStg[n] & 0x0f);            //convert to int
     else if (hexStg[n] >='a' && hexStg[n] <= 'f') //if a to f
        digit.Add((hexStg[n] & 0x0f) + 9);      //convert to int
     else if (hexStg[n] >='A' && hexStg[n] <= 'F') //if A to F
        digit.Add((hexStg[n] & 0x0f) + 9);      //convert to int
     else break;
    n++;
  }
  
  n--;					//back one digit
  int p=0;				//power factor
  int x=2;
  while(n >=0) 
  {
     intValue = intValue + (digit.GetAt(n)*(__int64)mypow (x, p));
     n--;   // next digit to process
	 p+=4;	//everytime the power goes up in 4
  }
  
  return intValue;

}


....



	sBufResult[0] = 0x01;
	sBufResult[1] = 0x04;
	sBufResult[2] = 0x21;
	sBufResult[3] = 0xDD;
	sBufResult[4] = 0x82;

	s_result.Format("%s",GetHEX(hex_string_to_long(s_SN)));


es ist sehr sehr sehr dringend, bitte um Hilfe !


Danke.
 
:-) habe geschaft. Von lautern Suchen und Probieren habe ich zu viel gemacht.

statt
Code:
s_result.Format("%s",GetHEX(hex_string_to_long(s_SN)));
es hätte das gereicht :)
Code:
_i64toa(hex_string_to_long(s_SN),szBuff,10);

Alles andere hat gestimmt. Vielleicht hilft es jemanden.
 
Hi.
Reticent hat gesagt.:
Code:
	char *HEX="0123456789ABCDEF";
...
	delete []HEX;
Ähem, warum gibst du eine automatische Variable die mit einem konstanten Wert initialisiert wird mit delete[] frei? Du hast es doch gar nicht mit new[] alloziert?

C:
unsigned long long num = 0;
for (int i = 5; i > 0; i--) {
    num += sBufResult[5-i] * pow(256, i-1);
}
printf("%llu\n", num);
Gruß
 
Zurück