读书人

请教这段C++代码怎么译成DELPHI的。

发布时间: 2012-02-14 19:19:19 作者: rapoo

请问这段C++代码如何译成DELPHI的。。

C/C++ code
/*by Flea*/int LZSSDecode(unsigned char * in,unsigned char * out,int szin,int szout){        szin = szin > 0? szin: 0x7fffffff;    int  i, j, k, r = 0, pr, pi = 0,po = 0;    unsigned int  flags = 0;        unsigned char buf[0x100F], c;    for (i = 0; i < 0x100F; buf[i] = 0x20, i++);    while (pi < szin && po < szout)        {        if (((flags >>= 1) & 256) == 0)                {                        if(pi >= szin)break;                c = in[pi++];            flags = c | 0xff00;        }        if (flags & 1)                {                        if(pi >= szin || po >= szout)break;                        c = in[pi++];                        out[po++] = c;                        buf[r++] = c;                        r &= 0xfff;        } else                {                        if(pi + 1 >= szin)break;            i = in[pi++];            j = in[pi++];            i |= (j & 0xf0) << 4;                        j  = (j & 0x0f) + 2;                        pr = r;             for (k = 0; k <= j; k++)                        {                c = buf[(pr - i + k) & 0xfff];                                if(po >= szout)break;                    out[po++] = c;                                buf[r++] = c;                                r &= 0xfff;            }        }    }    return pi;}


[解决办法]
FUNCTION LZSSDecode(cin, cout: pbytearray; szin, szout: integer): integer;
VAR i, j, k, r, pr, pi, po: Integer;
flags : INTEGER;
buf : ARRAY[0..$100F] OF byte;
c : byte;
BEGIN

IF szin <= 0 THEN
szin := $7FFFFFFF;
r := 0;
pi := 0;
po := 0;
flags := 0;
i:=0;
while(i<$100F) DO
BEGIN
buf[i] := $20;
WHILE (pi < szin) AND (po < szout) DO
BEGIN
IF (((flags SHR 1) AND 256) = 0) THEN
BEGIN
IF (pi >= szin) THEN break;
c := cin[pi];
pi := pi + 1;
flags := c OR $FF00;
END;
IF ((flags AND 1) <> 0) THEN
BEGIN
IF (pi >= szin) OR (po >= szout) THEN break;
c := cin[pi];
pi := pi + 1;
cout[po] := c;
po := po + 1;
buf[r] := c;
r := r + 1;
r := r AND $FFF;
END
ELSE
BEGIN
IF (pi + 1 >= szin) THEN break;
i := cin[pi];
pi := pi + 1;
j := cin[pi];
pi := pi + 1;
i := i OR (j AND $F0) SHL 4;
j := (j AND $0F) + 2;
pr := r;
FOR k := 0 TO j DO
BEGIN
c := buf[(pr - i + k) AND $FFF];
IF (po >= szout) THEN break;
cout[po] := c;
po := po + 1;
buf[r] := c;
r := r + 1;
r := r AND $FFF;
END;
END;
i:=i+1;
END;
result := pi;
END;
END;

这里粗略翻翻可能有问题在自己检查下
[解决办法]
FUNCTION LZSSDecode(cin, cout: pbytearray; szin, szout: integer): integer;
VAR i, j, k, r, pr, pi, po: Integer;
flags : INTEGER;
buf : ARRAY[0..$100F] OF byte;


c : byte;
BEGIN

IF szin <= 0 THEN
szin := $7FFFFFFF;
r := 0;
pi := 0;
po := 0;
flags := 0;
i:=0;
while(i<$100F) DO
BEGIN
buf[i] := $20;
WHILE (pi < szin) AND (po < szout) DO
BEGIN
IF (((flags SHR 1) AND 256) = 0) THEN
BEGIN
IF (pi >= szin) THEN break;
c := cin[pi];
pi := pi + 1;
flags := c OR $FF00;
END;
IF ((flags AND 1) <> 0) THEN
BEGIN
IF (pi >= szin) OR (po >= szout) THEN break;
c := cin[pi];
pi := pi + 1;
cout[po] := c;
po := po + 1;
buf[r] := c;
r := r + 1;
r := r AND $FFF;
END
ELSE
BEGIN
IF (pi + 1 >= szin) THEN break;
i := cin[pi];
pi := pi + 1;
j := cin[pi];
pi := pi + 1;
i := i OR (j AND $F0) SHL 4;
j := (j AND $0F) + 2;
pr := r;
FOR k := 0 TO j DO
BEGIN
c := buf[(pr - i + k) AND $FFF];
IF (po >= szout) THEN break;
cout[po] := c;
po := po + 1;
buf[r] := c;
r := r + 1;
r := r AND $FFF;
END;
END;

END;
i:=i+1;
END;
result := pi;END;

读书人网 >.NET

热点推荐