base64转码的简单问题,谢谢高手
buf[0]   =   (byte)   ((bytes[i]   &   0xFC)   > >    2); 
 buf[1]   =   (byte)   (((bytes[i]   &   0x03)    < <   4)   |   ((bytes[i   +   1]   &   0xF0)   > >    4)); 
 buf[2]   =   (byte)   (((bytes[i   +   1]   &   0x0F)    < <   2)   |   ((bytes[i   +   2]   &   0xC0)   > >    6)); 
 buf[3]   =   (byte)   (bytes[i   +   2]   &   0x3F);   
 ××××××××××××××   
 为什么要和0xFC做&操作呢	,下面又是0x03   
 资料中这样说: 
 第一个字符通过右移2位获得第一个目标字符的Base64表位置,根据这个数值取到表上相应的字符,就是第一个目标字符。 
 然后将第一个字符左移4位加上第二个字符右移4位,即获得第二个目标字符。 
 再将第二个字符左移2位加上第三个字符右移6位,获得第三个目标字符。 
 最后取第三个字符的右6位即获得第四个目标字符。   
 看不懂代码中为什么要和16进制的数值进行操作
------解决方案--------------------去掉不相关的二进制位
------解决方案--------------------我也好像有点不明白,那直接用 bytes[i] > >  2 不可以吗?为什么还要与 0xfc 进行运算呢?
------解决方案--------------------//0xFC对应的二进制是11111100, 意思就是取前6位(因为b[i]的后2位被0与掉了), > > 2表示右移2位, 即取前6位 
     buf[0] = (byte)((b[i] & 0xFC) > >  2);       
     //0x03对应的二进制是00000011, 即留前一个字符b[i]的后2位, 要左移4位, 以便给下4位留个地方;  
     0xF0对应的二进制是11110000, 取当前数的前4位作为6位数的后4位, 所以利用> > 4, 和前一个数的后2位结合就是共6位了*/ 
     buf[1] = (byte)(((b[i] & 0x03)  < < 4) | ((b[i+1] & 0xF0) > >  4));       
     //类似上面的, 取bytes[i+1]后4位作为高4位, 取bytes[i+2]前2为作为低2位 
     buf[2] = (byte)(((b[i+1] & 0x0F)  < < 2) | ((b[i+2] & 0xC0) > >  6));       
     //最后的低6位作为最后的6位 
     buf[3] = (byte)( b[i+2] & 0x3F);
------解决方案--------------------位操作有很大程度上取决于个人习惯问题,其实方法很多,但是一定要统一自己的位操作思想。   
 上述代码里面的位操作就很规范,每次都是先将不用的位置置0,然后位移得到需要的位,为了这个规范性,一点点操作上的重复是完全有必要的。