Hex String zu normalem String

Termy2007

Mitglied
Hi@all.

Bin nun schon ne Weile auf der Suche nach einer Funktion die mir aus einem String mit Hex-Charaktern z.B. "5AD6483D" den entsprechenden lesbaren ASCII Text macht.. in dem Fall: "ZÖH="

Das hier hab ich probiert aber da kommt in meinem Fall nur das Original raus:
Code:
string fromHex(string pSrc)
{
    int nSrcLen = strlen(pSrc.c_str());
    string out = "";
    for(int j = 0; j<nSrcLen; j += 2)
    {
        BYTE b1= pSrc[j]   -'0'; if (b1>9) b1 -= 7;
        BYTE b2= pSrc[j+1] -'0'; if (b2>9) b2 -= 7;
        char temp = (char)((b1<<4) + b2);

        out.append((const char*)&temp);
    }
    return out;
}

Vielleicht wisst ihr es besser ;-)

Grüße
 
Hi.
Code:
    int nSrcLen = strlen(pSrc.c_str());
Warum so kompiliziert? Ein std::string kann auch \0 Terminierungszeichen enthalten und ein std::string besitzt bereits eine Länge (oder Größe [Anm. d. Red. ;)]).
C++:
inline char convert(char c) {
  if (isdigit(c))
    return c - '0';
  else
    return tolower(c) - 'a' + 10;
}

string fromHex(string pSrc)
{
  int nSrcLen = pSrc.size();
  string out;
  for(int j = 1; j < nSrcLen; j += 2)
    {
      out += convert(pSrc[j-1]) * 16 + convert(pSrc[j]);
    }
  return out;
}
Gruß
 
Wenn du mit char* arbeiten möchtest, kannst du dir auch mal die Funktion strtol() anschauen. ;)
Ein kleines Beispiel:
C++:
cout<<strtol("5AD6483D", 0, 16)<<endl;
 
Zuletzt bearbeitet von einem Moderator:
Hm.. genau das hab ich auch schon versucht.. scheint wohl ein Problem von Codeblocks zu sein der nimmt meine Änderungen an der main.cpp nicht an.. seltsam..
Auf jeden Fall danke für eure schnellen und kompetenten Antworten :-)

EDIT: Jetzt gehts! Prima! Codeblocks war irgendwie 5x im Hintergrund und hat immer ne uralte Version meines Programms gestartet.. hab mich schon gewundert warum der andere Teil auch einfach ignoriert wurde... echt seltsam.. jetzt nach nem Neustart gehts..
 
Zuletzt bearbeitet:
Zurück