求懂delphi的大佬帮忙翻译成Net
Yun__ 2018-04-23 11:47:53 求懂delphi的大佬帮忙翻译
看了半天 很多关键字都不认识
procedure Encode6BitBuf(pSrc, PDest: PChar; nSrcLen, nDestLen: Integer);
var
i: Integer;
nRestCount: Integer;
nDestPos: Integer;
btMade: byte;
btCh: byte;
btRest: byte;
btXor: Byte;
begin
nRestCount := 0;
btRest := 0;
nDestPos := 0;
for i := 0 to nSrcLen - 1 do
begin
if nDestPos >= nDestLen then
break;
btCh := byte(pSrc[i]);
{$IF ENDECODEMODE = NEWMODE}
btXor := BITMASKS;
Inc(btXor, i);
btCh := btCh xor btXor;
{$IFEND}
btMade := byte((btRest or (btCh shr (2 + nRestCount))) and $3F);
btRest := byte(((btCh shl (8 - (2 + nRestCount))) shr 2) and $3F);
Inc(nRestCount, 2);
if nRestCount < 6 then
begin
PDest[nDestPos] := Char(btMade + $3C);
Inc(nDestPos);
end
else
begin
if nDestPos < nDestLen - 1 then
begin
PDest[nDestPos] := Char(btMade + $3C);
PDest[nDestPos + 1] := Char(btRest + $3C);
Inc(nDestPos, 2);
end
else
begin
PDest[nDestPos] := Char(btMade + $3C);
Inc(nDestPos);
end;
nRestCount := 0;
btRest := 0;
end;
end;
if nRestCount > 0 then
begin
PDest[nDestPos] := Char(btRest + $3C);
Inc(nDestPos);
end;
PDest[nDestPos] := #0;
end;
procedure Decode6BitBuf(sSource: PChar; pbuf: PChar; nSrcLen, nBufLen: Integer);
const
Masks: array[2..6] of byte = ($FC, $F8, $F0, $E0, $C0);
var
i, nBitPos, nMadeBit, nBufPos: Integer;
btCh, btTmp, btByte, btXor: byte;
begin
nBitPos := 2;
nMadeBit := 0;
nBufPos := 0;
btTmp := 0;
btCh := 0;
for i := 0 to nSrcLen - 1 do
begin
if Integer(sSource[i]) - $3C >= 0 then
btCh := byte(sSource[i]) - $3C
else
begin
nBufPos := 0;
break;
end;
if nBufPos >= nBufLen then
break;
if (nMadeBit + 6) >= 8 then
begin
btByte := byte(btTmp or ((btCh and $3F) shr (6 - nBitPos)));
{$IF ENDECODEMODE = NEWMODE}
btXor := BITMASKS;
Inc(btXor, nBufPos);
btByte := btByte xor btXor;
{$IFEND}
pbuf[nBufPos] := Char(btByte);
Inc(nBufPos);
nMadeBit := 0;
if nBitPos < 6 then
Inc(nBitPos, 2)
else
begin
nBitPos := 2;
continue;
end;
end;
btTmp := byte(byte(btCh shl nBitPos) and Masks[nBitPos]);
Inc(nMadeBit, 8 - nBitPos);
end;
pbuf[nBufPos] := #0;
end;