您的位置:首页 > 移动开发 > IOS开发

iOS 图片转换成base64(二)

2016-04-08 18:30 453 查看
+ (NSString*) base64Encode:(NSData *)data
{
    static
char base64EncodingTable[64] = {
        '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', '+',
'/'
    };
    int length = [data
length];
    unsigned
long ixtext, lentext;
    long ctremaining;
    unsigned
char input[3], output[4];
    short i, charsonline =
0, ctcopy;
    const
unsigned char *raw;
    NSMutableString *result;
    
    lentext = [data length];
    if (lentext <
1)
        return
@"";
    result = [NSMutableString
stringWithCapacity: lentext];
    raw = [data bytes];
    ixtext = 0;
    
    while (true) {
        ctremaining = lentext - ixtext;
        if (ctremaining <=
0)
            break;
        for (i =
0; i < 3; i++) {
            unsigned
long ix = ixtext + i;
            if (ix < lentext)
                input[i] = raw[ix];
            else
                input[i] = 0;
        }
        output[0] = (input[0] &
0xFC) >> 2;
        output[1] = ((input[0] &
0x03) << 4) | ((input[1] &
0xF0) >> 4);
        output[2] = ((input[1] &
0x0F) << 2) | ((input[2] &
0xC0) >> 6);
        output[3] = input[2] &
0x3F;
        ctcopy = 4;
        switch (ctremaining) {
            case
1:
                ctcopy = 2;
                break;
            case
2:
                ctcopy = 3;
                break;
        }
        
        for (i =
0; i < ctcopy; i++)
            [result appendString: [NSString
stringWithFormat: @"%c", base64EncodingTable[output[i]]]];
        
        for (i = ctcopy; i <
4; i++)
            [result appendString:
@"="];
        
        ixtext += 3;
        charsonline += 4;
        
        if ((length >
0) && (charsonline >= length))
            charsonline = 0;
    }
    return result;
}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: