Byte-Werte als String ausgeben
-
Hallo,
ich lese binäre Werte ("Binary Value") aus der Registry aus und speicher die in einem char-Array. Das klappt dem Debugger zu Folge auch. Nun möchste ich diese in einem "Edit Control" ausgeben, und zwar genau so, wie sie auch der Registry stehen. Also wenn da "00 00 33 44 00 FF 00" steht, dann will ich auch genau diese Zeichenfolge angezeigt bekommen.
Ich habe folgendes probiert:
HKEY hKey; unsigned char temp[28] = {""}; unsigned long size = sizeof(temp); RegOpenKey(HKEY_LOCAL_MACHINE,"a\\b\\c", &hKey); RegQueryValueEx(hKey, "asdf", NULL, NULL, temp, &size); RegCloseKey(hKey); char buffer[28]; sprintf(buffer,"%x",temp); output.ReplaceSel(buffer);
Allerdings zeigt er mit dann irgend ne random hex Zahl an...
-
Hallo,
so geht das nicht, ein Blick in die Doku verrät, warum:
"%x" erwartet den Typ int.
sprintf bekommt von dir einen Zeiger auf den Anfang der Bytes, die du hexadezimal anzeigen möchtest, Zeiger = (zufällige) Adresse, die wird als int interpretiert, weil du "%x" angegeben hast
Du musst also dafür sorgen, dass auf jedes einzelne Byte zugegriffen wird, und nicht auf die Adresse der Bytes.
MfG,
Probe-Nutzer
-
etwa so:
void to_hex (unsigned char *in, unsigned size, char *out) { while (size--) out += sprintf (out, "%02x", *in++); } // test int main() { unsigned char test[] = {1,2,3}; char buff[2*sizeof(test)+1]; to_hex (test, sizeof(test), buff); puts (buff); }
-
Klappt, merci