Created
February 22, 2012 20:14
-
-
Save calebmadrigal/1886963 to your computer and use it in GitHub Desktop.
Objective-C method which takes an NSString* and returns an base64-encoded NSString*
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
+ (NSString *)base64String:(NSString *)str | |
{ | |
NSData *theData = [str dataUsingEncoding: NSASCIIStringEncoding]; | |
const uint8_t* input = (const uint8_t*)[theData bytes]; | |
NSInteger length = [theData length]; | |
static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; | |
NSMutableData* data = [NSMutableData dataWithLength:((length + 2) / 3) * 4]; | |
uint8_t* output = (uint8_t*)data.mutableBytes; | |
NSInteger i; | |
for (i=0; i < length; i += 3) { | |
NSInteger value = 0; | |
NSInteger j; | |
for (j = i; j < (i + 3); j++) { | |
value <<= 8; | |
if (j < length) { | |
value |= (0xFF & input[j]); | |
} | |
} | |
NSInteger theIndex = (i / 3) * 4; | |
output[theIndex + 0] = table[(value >> 18) & 0x3F]; | |
output[theIndex + 1] = table[(value >> 12) & 0x3F]; | |
output[theIndex + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '='; | |
output[theIndex + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '='; | |
} | |
return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment