Sub Menu
Suche

Last Online
In order to view the online list you have to be registered and logged in.



We are a free and open
community, all are welcome.

Click here to Register

zLib für CStrings - grmls!

zLib für CStrings - grmls!

BeitragAuthor: WiZaRd » So 15. Aug 2010, 19:27

Hi ihrs,

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*
Bild

... 9 von 10 Stimmen im meinem Kopf sagen ich bin nicht verrückt... - die 10te summt die Melodie von TETRIS
Benutzeravatar
WiZaRd
Forenlegende
 
Beiträge: 3805
Registriert: Fr 7. Jan 2005, 19:28
Wohnort: The Realm of Magic

BeitragAuthor: Jens K. Loewe » Mi 18. Aug 2010, 02:30

Hast du da inzwischen eine Lösung gefunden? (Warum willst du es überhaupt in einem CString nutzen?)

MfG,
JKL

Jens K. Loewe
Stammgast
 
Beiträge: 221
Registriert: Do 29. Apr 2010, 00:27

BeitragAuthor: WiZaRd » Mi 18. Aug 2010, 08:22

Nunja, wie beschrieben möchte ich URLs kodieren, das sind nunmal Strings und da ich in V$ arbeite und unter UNICODE möchte ich nat. CStrings nutzen. Es bringt ja nichts, wenn ich die URL zwar kodieren kann, das Ergebnis dann aber nicht ausgeben und verwenden kann.
Lustigerweise funktioniert das ganze, wenn ich es mit TCHAR* mache (was eigentlich falsch ist, da BYTE* ja char* wäre) und diese an die decompress Funktion weiterleite... sobald es aber CStrings sind, passt es nicht mehr. Ich nehme an das liegt zum einen am UNICODE, da dort ja jedes Zeichen 2 Byte hat und zum anderen daran, dass ein CString '' als Endzeichen nimmt und wenn dieses zufällig im gepackten String vorkommt, dann kann ich den auch nicht mehr zu einem CString machen, ohne dass die Zeichen nach '' verlorengehen...
Evtl. gibt es ja aber spezielle Algorithmen um Strings zu verschlüsseln? Ich kenn leider auswendig keine...
Bild

... 9 von 10 Stimmen im meinem Kopf sagen ich bin nicht verrückt... - die 10te summt die Melodie von TETRIS
Benutzeravatar
WiZaRd
Forenlegende
 
Beiträge: 3805
Registriert: Fr 7. Jan 2005, 19:28
Wohnort: The Realm of Magic

BeitragAuthor: Jens K. Loewe » Mi 18. Aug 2010, 11:08

Mir würde da spontan Bitshifting einfallen, aber ich weiß nicht, ob Unicode das mag. :)

MfG,
JKL

Jens K. Loewe
Stammgast
 
Beiträge: 221
Registriert: Do 29. Apr 2010, 00:27

BeitragAuthor: WiZaRd » Mi 18. Aug 2010, 12:14

Siehe erster Post, bereits versucht und versagt *grml*
Bild

... 9 von 10 Stimmen im meinem Kopf sagen ich bin nicht verrückt... - die 10te summt die Melodie von TETRIS
Benutzeravatar
WiZaRd
Forenlegende
 
Beiträge: 3805
Registriert: Fr 7. Jan 2005, 19:28
Wohnort: The Realm of Magic


Zurück zu Entwicklung

Wer ist online?

Mitglieder: Google [Bot]

cron