Recent Posts

Showing posts with label base64. Show all posts
Showing posts with label base64. Show all posts

iOS: Encode base64 on iphone SDK

If you want to encode base64 on iPhone SDK you can try the next code snippet:  


(NSString )decodeBase64:(NSString )input { 
NSString alphabet = @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-"; 
NSString decoded = @""; 
NSString *encoded = [input stringByPaddingToLength:(ceil([input length] / 4) * 4) withString:@"A" startingAtIndex:0];

int i; char a, b, c, d; UInt32 z;

for(i = 0; i < [encoded length]; i += 4) { a = [alphabet rangeOfString:[encoded substringWithRange:NSMakeRange(i + 0, 1)]].location; b = [alphabet rangeOfString:[encoded substringWithRange:NSMakeRange(i + 1, 1)]].location; c = [alphabet rangeOfString:[encoded substringWithRange:NSMakeRange(i + 2, 1)]].location; d = [alphabet rangeOfString:[encoded substringWithRange:NSMakeRange(i + 3, 1)]].location;

z = ((UInt32)a << 26) + ((UInt32)b << 20) + ((UInt32)c << 14) + ((UInt32)d << 8); decoded = [decoded stringByAppendingString:[NSString stringWithCString:(char *)&z]]; }

return decoded; }

The following code converts an NS Data Object to a base64 string:

(NSString )base64Encoding { NSTask task = [NSTask alloc] init] autorelease]; NSPipe inPipe = [NSPipe pipe], outPipe = [NSPipe pipe]; NSFileHandle inHandle = [inPipe fileHandleForWriting], outHandle = [outPipe fileHandleForReading]; NSData *outData = nil;

[task setLaunchPath:@"/usr/bin/openssl"]; [task setArguments:[NSArray arrayWithObjects:@"base64", @"-e", nil; [task setStandardInput:inPipe]; [task setStandardOutput:outPipe]; [task setStandardError:outPipe];

[task launch];

[inHandle writeData:self]; [inHandle closeFile];

[task waitUntilExit];

outData = [outHandle readDataToEndOfFile]; if (outData) { NSString *base64 = [NSString alloc] initWithData:outData encoding:NSUTF8StringEncoding] autorelease]; if (base64) return base64; }

return nil; }