java 转C的有关问题

java 转C的问题
有没有对JAVA熟悉的,帮忙转下代码


current = (byte)(((a << 2) & 0xfc) | ((b >>> 4) & 3)); 
这个怎么表示?用C语言

完成代码如下:




import java.text.StringCharacterIterator;
import java.text.CharacterIterator;

/**
 * See the BASE64MailboxEncoder for a description of the RFC2060 and how
 * mailbox names should be encoded.  This class will do the correct decoding
 * for mailbox names.
 *
 * @author Christopher Cotton
 */

public class BASE64MailboxDecoder {
    
    public static String decode(String original) {
if (original == null || original.length() == 0)
    return original;

boolean changedString = false;
int copyTo = 0;
// it will always be less than the original
char[] chars = new char[original.length()]; 
StringCharacterIterator iter = new StringCharacterIterator(original);

for(char c = iter.first(); c != CharacterIterator.DONE; 
    c = iter.next()) {

    if (c == '&') {
changedString = true;
copyTo = base64decode(chars, copyTo, iter);
    } else {
chars[copyTo++] = c;
    }
}

// now create our string from the char array
if (changedString) {
    return new String(chars, 0, copyTo);
} else {
    return original;
}
    }


    protected static int base64decode(char[] buffer, int offset,
      CharacterIterator iter) {
boolean firsttime = true;
int leftover = -1;

while(true) {
    // get the first byte
    byte orig_0 = (byte) iter.next();
    if (orig_0 == -1) break; // no more chars
    if (orig_0 == '-') {
if (firsttime) {
    // means we got the string "&-" which is turned into a "&"
    buffer[offset++] = '&';
}
// we are done now
break;
    }
    firsttime = false;
    
    // next byte
    byte orig_1 = (byte) iter.next();     
    if (orig_1 == -1 || orig_1 == '-')
break; // no more chars, invalid base64
    
    byte a, b, current;
    a = pem_convert_array[orig_0 & 0xff];
    b = pem_convert_array[orig_1 & 0xff];
    // The first decoded byte
    current = (byte)(((a << 2) & 0xfc) | ((b >>> 4) & 3));

    // use the leftover to create a Unicode Character (2 bytes)
    if (leftover != -1) {
buffer[offset++] = (char)(leftover << 8 | (current & 0xff));
leftover = -1;
    } else {
leftover = current & 0xff;
    }
    
    byte orig_2 = (byte) iter.next();
    if (orig_2 == '=') { // End of this BASE64 encoding
continue;
    } else if (orig_2 == -1 || orig_2 == '-') {
     break; // no more chars
    }
         
    // second decoded byte
    a = b;
    b = pem_convert_array[orig_2 & 0xff];
    current = (byte)(((a << 4) & 0xf0) | ((b >>> 2) & 0xf));

    // use the leftover to create a Unicode Character (2 bytes)
    if (leftover != -1) {
buffer[offset++] = (char)(leftover << 8 | (current & 0xff));