请教这段C++代码怎么译成DELPHI的。
请问这段C++代码如何译成DELPHI的。。
------解决方案--------------------
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/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;