ich versuche grade für meine HP ein Tool zu schreiben, dass URLs "packt" (sowieso wie tiny.url). Ich wollte dazu mal die zLib verwenden, aber ich werde langsam kirre... hat schonmal jmd. den Kram für Strings nutzt?
Das Problem ist, dass die Funktionen BYTE* erwarten und zurückliefern... an sich KEIN Problem, ich hab z.B. einfach sowas gemacht:
int result = compress2(output, &newsize, (Bytef*)url.GetString(), uBytes, 9);
und offenbar klappt das auch, denn wenn ich danach
int iZLibResult = uncompress(unpack, &unpackedsize, output, newsize);
aufrufe, dann passt alles - nunja FAST, sonst würde ich ja nicht meckern
Nummero Uno:
Wenn ich das wie oben mache, dann kann ich via std::cout << unpack << std::endl; den Buffer ausgeben und das passt dann auch - ich krieg den Buffer aber nicht in ein CString! Egal was ich bisher probiert habe, es landet immer nur der erste Buchstabe im CString - obwohl der Rest ja ausgegeben wird!
Nummero Zwo:
Wenn ich das NICHT sofort danach aufrufe, sondern das Ergebnis erstmal in einem CString speichern will (das ist dann ja die gepackte URL), dann bekomme ich das zwar hin via
CString ret((const char*)pByte);
wobei das evtl. Probleme macht, falls der Buffer nen '\0' enthält also bzw.
CA2T pszTemp((const char*)output);
ret = pszTemp;
(wobei mir das auch nicht gefällt) - aber das PROBLEM ist dann, dass ich via
int iZLibResult = uncompress(unpack, &unpackedsize, (Bytef*)strUnpack.GetString(), uBytes);
direkt nen ZLIB Fehler bekomme (Z_DATA_ERROR) - die Frage ist also:
1. wie krieg ich das Ergebnis KORREKT in einen CString und
2. wie krieg ich das Ergebnis dann wieder KORREKT entpackt (und das Ergebnis wie bei 1. wieder in einen CString)?!
Jmd. ne Idee? Ich werd nun auch mal drüber schlafen, aber das regt mich grade auf:eek:
LG,
WiZ
PS: Aso!
Sowas:
CString ret = L"";
for(UINT i = 0; i < nSize; ++i)
ret.AppendFormat(L"%c", pByte[i]);
oder sowas
char* pChar = new char[nSize+1];
memcpy(pChar, pByte, nSize);
pChar[nSize] = L'\0';
ret = CString(pChar);
delete[] pChar;
oder auch
ret.GetBufferSetLength(nSize);
for (int n = 0; n < nSize; ++n)
ret.SetAt(n, pByte[n]);
hab ich schon durch *grml*