/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Zlib kompression
Fra : Jeppe Seidelin Dam


Dato : 14-03-01 22:46

Hej alle.

Jeg har et (kæmpe) array of word, som jeg gerne vil have pakket ned i et
forhåbentlig lidt mindre array of word, med pakken zlib - (under Delphi 5).
Jeg har selv skrevet mit eget kompressionshalløj (en slags discount huffmann
kompression), og jeg ville gerne se hvor godt der performer sammenlignet med
zlib, både mht. kompression og især hastighed.
Mit problem er at jeg aldrig rigtigt har lært at bruge pointere (hverken
edb-betegnelsen eller hunderacen).
Så når funktionen " ZCompress(Bytef *dest, uLongf *destLen, const Bytef
*source, uLong sourceLen); " beder om pointere i stedet for mine arrays,
hvad gør man så.
Se evt. <http://www.info-zip.org/pub/infozip/zlib/manual.html>

var
BigArray[0..7500000] of word;
PackedArray[0..8000000] of word;
BigLength,PackedLength : longint;

begin
BigLength:=7500000;
....
ZCompress(secret1,BigLength,secret2,PackedLength);
end;

Hvad skal jeg skrive i stedet for "..."

Håber nogen kan hjælpe.

mvh
Jeppe Seidelin Dam



 
 
Niels (14-03-2001)
Kommentar
Fra : Niels


Dato : 14-03-01 23:03

Just as I expected, Jeppe Seidelin Dam came up with this:

>Så når funktionen " ZCompress(Bytef *dest, uLongf *destLen, const Bytef
>*source, uLong sourceLen); " beder om pointere i stedet for mine arrays,
>hvad gør man så.

>var
>BigArray[0..7500000] of word;
>PackedArray[0..8000000] of word;
>BigLength,PackedLength : longint;
>
>begin

BigLength := SizeOf(BigArray);
PackedLength := SizeOf(PackedArray);
ZCompress(@PackedArray, PackedLength, @BigArray, BigLength);

>end;

Du bruger @ tegnet til at "fremstille" en pointer og så SizeOf()
funktionen til at finde ud af hvor mange bytes din array bruger (så vidt
jeg kan se/gætte så vil den have længden i bytes). Jeg sender BigLength
og PackedLength med som variabler i stedet for bare at bruge SizeOf()
direkte i kaldet fordi deklarationen i C beder om pointere til destLen
og sourceLen parametrene. Hvis det ikke fungerer, så prøv evt. også at
sætte @ foran PackedLength og BigLength.

Niels
--
e-mail: nmartin at iname dot com
ICQ UIN: 50187323
http://www.niller.f2s.com/ - niLLer's pages

Jeppe Seidelin Dam (15-03-2001)
Kommentar
Fra : Jeppe Seidelin Dam


Dato : 15-03-01 13:57

> ZCompress(@PackedArray, PackedLength, @BigArray, BigLength);

Tak skal du have (delphivarianten har dog byttet om på Big og Packed i
forhold til C-varianten).
dvs.
ZCompress(@BigArray, BigLength, @PackedArray, PackedLength);

Så langt så godt. Den spiser (så vidt jeg kan se) de 2 første parametre helt
ok, men den skriver "types of actual and formal parameters must be
identical" til den tredie parameter. Jeg har så prøvet at lave PackedArray
om til et array of byte i stedet for word, men det hjalp ikke. Nogen idéer?

mvh
Jeppe Seidelin Dam



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408927
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste