Byte in darstellbares Zeichen umwandeln
-
Hallo zusammen,
versuche gerade eine eindeutige Session-ID auf einem Windows-System zu erzeugen.
Dazu lasse ich mir immer eine GUID generieren (CoCreateGuid).
Da die weitere Verwendung der Session-ID aber immer in Form eines Strings vorgenommen werden muss, muss ich diese GUID in einen String umwandeln.
Die in Windows dafür vorgesehene Funktion StringFromGUID2 hilft da erst einmal nicht, da meine SessionID maximmal 30 Zeichen haben darf.
Also wollte ich die Umwandlung selbst machen. Das klappt auch soweit, allerdings nicht für den letzten Part der GUID.
Dieser besteht aus einem Array von 8 Byte (in meinem Header ist es so definiert: unsigned char Data4[8]).
Meine Frage lautet nun: Wie kann ich diese 8 Byte eindeutig in darstellbare 8 Zeichen verwandeln (also Buchstaben, Zahlen aber keine Steuerzeichen etc.)? Gibt es dafür einen guten Algorithmus?
Vielen Dank schon einmal!
Ciao
-
sprintf(Data4, "%s", Data4);
vielleicht?
Edit:
für dein Ziel-Array brauchst du noch ein Byte zusätzlich für '\0'.
-
oder das vielleicht: http://msdn.microsoft.com/en-us/library/ms683917(VS.85).aspx
-
Nein, da hier auch Steuerzeichen wie "Carriage Return" und "Line Feed" mit übernommen werden. Diese dürfen in der SessionID aber nicht enthalten sein!
-
+fricky schrieb:
oder das vielleicht: http://msdn.microsoft.com/en-us/library/ms683917(VS.85).aspx
Hm mache wohl noch was falsch!
Folgendes funktioniert nicht:
GUID guid; CoCreateGuid(&guid); LPOLESTR guidString; StringFromCLSID(&guid, &guidString);
In der Ausgabe mit:
printf("GUIDString:%s\n\n", guidString);
Bekomme ich dann aber nur ein Zeichen zu sehen!
Was stimmt da noch nicht? Ist die Ausgabe etwa immer in Unicode?
Sollte wohl erwähnen, dass ich nur ASCII brauche.
Ciao
-
^^kann sein, dass diese funktion UTF-16 strings ausspuckt. probier's ausgeben mal mit 'wprintf' oder sowas.
-
ach so, wenn du 'nen normalen char[] string daraus machen willst, dann nimm einfach jedes zweite zeichen (also jede ungerade position aus dem utf-16 string).
-
äääh, sorry, ich meinte jede gerade, also 0,2,4, usw...