首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

麻烦帮小弟我将下面这段变形的BASE64(非原型) JAVA版转为ASP版

2012-03-16 
麻烦帮我将下面这段变形的BASE64(非原型) JAVA版转为ASP版publicstaticStringencode(bytedata[]){returnen

麻烦帮我将下面这段变形的BASE64(非原型) JAVA版转为ASP版
public   static   String   encode(byte   data[])
        {
                return   encode(data,   0,   data.length);
        }

        public   static   String   encode(byte   data[],   int   off,   int   len)
        {
                if(len   <=   0)
                        return   " ";
                char   out[]   =   new   char[(len   /   3)   *   4   +   4];
                int   rindex   =   off;
                int   windex   =   0;
                int   rest;
                for(rest   =   len   -   off;   rest   > =   3;   rest   -=   3)
                {
                        int   i   =   ((data[rindex]   &   0xff)   < <   16)   +   ((data[rindex   +   1]   &   0xff)   < <   8)   +   (data[rindex   +   2]   &   0xff);
                        out[windex++]   =   S_BASE64CHAR[i   > >   18];
                        out[windex++]   =   S_BASE64CHAR[i   > >   12   &   0x3f];
                        out[windex++]   =   S_BASE64CHAR[i   > >   6   &   0x3f];
                        out[windex++]   =   S_BASE64CHAR[i   &   0x3f];
                        rindex   +=   3;
                }

                if(rest   ==   1)
                {
                        int   i   =   data[rindex]   &   0xff;
                        out[windex++]   =   S_BASE64CHAR[i   > >   2];
                        out[windex++]   =   S_BASE64CHAR[i   < <   4   &   0x3f];
                        out[windex++]   =   '= ';
                        out[windex++]   =   '= ';
                }   else
                if(rest   ==   2)
                {


                        int   i   =   ((data[rindex]   &   0xff)   < <   8)   +   (data[rindex   +   1]   &   0xff);
                        out[windex++]   =   S_BASE64CHAR[i   > >   10];
                        out[windex++]   =   S_BASE64CHAR[i   > >   4   &   0x3f];
                        out[windex++]   =   S_BASE64CHAR[i   < <   2   &   0x3f];
                        out[windex++]   =   '= ';
                }
                return   new   String(out,   0,   windex);
        }

        private   static   final   char   S_BASE64CHAR[]   =   {
                'A ',   'B ',   'C ',   'D ',   'E ',   'F ',   'G ',   'H ',   'I ',   'J ',  
                'K ',   'L ',   'M ',   'N ',   'O ',   'P ',   'Q ',   'R ',   'S ',   'T ',  
                'U ',   'V ',   'W ',   'X ',   'Y ',   'Z ',   'a ',   'b ',   'c ',   'd ',  
                'e ',   'f ',   'g ',   'h ',   'i ',   'j ',   'k ',   'l ',   'm ',   'n ',  
                'o ',   'p ',   'q ',   'r ',   's ',   't ',   'u ',   'v ',   'w ',   'x ',  
                'y ',   'z ',   '0 ',   '1 ',   '2 ',   '3 ',   '4 ',   '5 ',   '6 ',   '7 ',  
                '8 ',   '9 ',   '+ ',   '/ '
        };
        private   static   final   char   S_BASE64PAD   =   61;
        private   static   final   byte   S_DECODETABLE[];




[解决办法]
另提供一段原型的BASE64原型ASP版作参考

OPTION EXPLICIT
const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ "
dim nl
' zero based arrays
dim Base64EncMap(63)
dim Base64DecMap(127)

' must be called before using anything else
PUBLIC SUB initCodecs()


' init vars
nl = " <P> " & chr(13) & chr(10)
' setup base 64
dim max, idx
max = len(BASE_64_MAP_INIT)
for idx = 0 to max - 1
' one based string
Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
next
for idx = 0 to max - 1
Base64DecMap(ASC(Base64EncMap(idx))) = idx
next
END SUB

' encode base 64 encoded string
PUBLIC FUNCTION base64Encode(plain)

if len(plain) = 0 then
base64Encode = " "
exit function
end if

dim ret, ndx, by3, first, second, third
by3 = (len(plain) \ 3) * 3
ndx = 1
do while ndx <= by3
first = asc(mid(plain, ndx+0, 1))
second = asc(mid(plain, ndx+1, 1))

third = asc(mid(plain, ndx+2, 1))

ret = ret & Base64EncMap( (first \ 4) AND 63 )
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) )
ret = ret & Base64EncMap( third AND 63)

ndx = ndx + 3
loop
' check for stragglers
if by3 < len(plain) then

first = asc(mid(plain, ndx+0, 1))
ret = ret & Base64EncMap( (first \ 4) AND 63 )

if (len(plain) MOD 3 ) = 2 then
second = asc(mid(plain, ndx+1, 1))
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
ret = ret & Base64EncMap( ((second * 4) AND 60) )
else
ret = ret & Base64EncMap( (first * 16) AND 48)
ret = ret & "= "
end if
ret = ret & "= "
end if

base64Encode = ret
END FUNCTION

热点排行