Yet another Pascal to C#

valvet
valvet used Ask the Experts™
on
ciuly: You might remember our byte array from the other post, 'a'. This is what's being used here.

function deb(b:string):string;
var base: string;
    i, r, j: integer;
    b1, b2, b3, b4: byte;
    i1, i2, i3: byte;
begin
       
 i := 1;
 while i+4<Length(b) do begin
 
   b1 := a[ord(b[i])-20];
   b2 := a[ord(b[i+1])-20];
   b3 := a[ord(b[i+2])-20];
   b4 := a[ord(b[i+3])-20];

    i1 := (b1 shl 2)or(b2 shr 4);
    i2 := ((b2 and $f) shl 4)or(b3 shr 2);
    i3 := ((b3 and 3) shl 6)or(b4);

   //if i1*i2*i3<>0 then                  
   result := result + {'>'+}chr(i1)+chr(i2)+chr(i3);
   //result := result +
   //'|'+ int2str(i1)+','+ int2str(i2)+','+ int2str(i3)+
   //'('+int2str(b1)+','+ int2str(b2)+','+ int2str(b3)+','+int2str(b4)+')';

   inc(i,4);
 end;
end;
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Top Expert 2007
Commented:
this should be it:

        public string deb(byte[] a, string b)
        {
            string result = "";
            byte b1,b2,b3,b4;
            int i = 1, i1,i2,i3;
            while (i+4 < b.Length)
            {
                b1 = a[b[i-1]-20];
                b2 = a[b[i]-20];
                b3 = a[b[i+1]-20];
                b4 = a[b[i+2]-20];

                i1 = (b1 << 2) | (b2 >> 4);
                i2 = ((b2 & 0xf) << 4) | (b3 >> 2);
                i3 = ((b3 & 3) << 6) | b4;

                result = result + /*'>'+*/Convert.ToChar(i1)+Convert.ToChar(i2)+Convert.ToChar(i3);
                i = i+4;
            }
            return result;
        }

Author

Commented:
Excellent job.

Workes like a charm.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial