iOS 图片转换成base64(二)

来源:互联网 发布:金域名都小区怎么样 编辑:程序博客网 时间:2024/04/27 14:12

+ (NSString*) base64Encode:(NSData *)data

{

    staticchar 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 = [datalength];

    unsignedlong ixtext, lentext;

    long ctremaining;

    unsignedchar input[3], output[4];

    short i, charsonline =0, ctcopy;

    constunsigned char *raw;

    NSMutableString *result;

    

    lentext = [data length];

    if (lentext <1)

        return@"";

    result = [NSMutableStringstringWithCapacity: lentext];

    raw = [data bytes];

    ixtext = 0;

    

    while (true) {

        ctremaining = lentext - ixtext;

        if (ctremaining <=0)

            break;

        for (i =0; i < 3; i++) {

            unsignedlong 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) {

            case1:

                ctcopy = 2;

                break;

            case2:

                ctcopy = 3;

                break;

        }

        

        for (i =0; i < ctcopy; i++)

            [result appendString: [NSStringstringWithFormat: @"%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;

}  

0 0