Advertise Mobile SDKs Books Events Forum News Social Networking Support Us
Follow @iphonedevsdk on Twitter

Mockup & CodeGen, iPhone & iPad
($9.99)

Make your own iPhone apps
and run them live!
(free)

Manu
($0.99)

Want your application or service advertised on iPhone Dev SDK?

Go Back   iPhone Dev SDK Forum > iPhone SDK Development Forums > iPhone SDK Development

Reply
 
LinkBack Thread Tools Display Modes
Old 10-27-2008, 05:37 AM   #1 (permalink)
New Member
 
Join Date: Oct 2008
Posts: 11
Default Have problem with base64 Endcoder/decoder

i stuck in the code that encoder and decoder

how to use it

this is the code

base64.h
Code:
@interface NSData (Base64) 
	
+ (NSData *)dataWithBase64EncodedString:(NSString *)string;
- (id)initWithBase64EncodedString:(NSString *)string;

- (NSString *)base64Encodeing;
- (NSString *)base64EncodeingWithLineLength:(unsigned int) lineLength;

@end
base64.m

Code:
static char encodingTable[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','+','/' };

@implementation NSData (VQBase64)

- (id)initWithString:(NSString *)string {
	if (self = [super init]) {
		[self initWithBase64EncodedString:string];
	}
	return self;
	
}


+ (NSData *) dataWithBase64EncodedString:(NSString *) string {
	        return [[[NSData allocWithZone:nil] initWithBase64EncodedString:string] autorelease];
}

- (id) initWithBase64EncodedString:(NSString *) string {
 	        NSMutableData *mutableData = nil;
 	
 	        if( string ) {
 	                unsigned long ixtext = 0;
 	                unsigned long lentext = 0;
 	                unsigned char ch = 0;
 	                unsigned char inbuf[4], outbuf[3];
 	                short i = 0, ixinbuf = 0;
 	                BOOL flignore = NO;
 	                BOOL flendtext = NO;
 	                NSData *base64Data = nil;
 	                const unsigned char *base64Bytes = nil;
 	
 	                // Convert the string to ASCII data.
 	                base64Data = [string dataUsingEncoding:NSASCIIStringEncoding];
 	                base64Bytes = [base64Data bytes];
 	                mutableData = [NSMutableData dataWithCapacity:[base64Data length]];
 	                lentext = [base64Data length];
 	
 	                while( YES ) {
 	                        if( ixtext >= lentext ) break;
 	                        ch = base64Bytes[ixtext++];
 	                        flignore = NO;
 	
 	                        if( ( ch >= 'A' ) && ( ch <= 'Z' ) ) ch = ch - 'A';
 	                        else if( ( ch >= 'a' ) && ( ch <= 'z' ) ) ch = ch - 'a' + 26;
 	                        else if( ( ch >= '0' ) && ( ch <= '9' ) ) ch = ch - '0' + 52;
	                        else if( ch == '+' ) ch = 62;
 	                        else if( ch == '=' ) flendtext = YES;
 	                        else if( ch == '/' ) ch = 63;
 	                        else flignore = YES;
 	
 	                        if( ! flignore ) {
 	                                short ctcharsinbuf = 3;
 	                                BOOL flbreak = NO;
 	
 	                                if( flendtext ) {
 	                                        if( ! ixinbuf ) break;
 	                                        if( ( ixinbuf == 1 ) || ( ixinbuf == 2 ) ) ctcharsinbuf = 1;
 	                                        else ctcharsinbuf = 2;
 	                                        ixinbuf = 3;
 	                                        flbreak = YES;
 	                                }
 	
 	                                inbuf [ixinbuf++] = ch;
 	
 	                                if( ixinbuf == 4 ) {
 	                                        ixinbuf = 0;
 	                                        outbuf [0] = ( inbuf[0] << 2 ) | ( ( inbuf[1] & 0x30) >> 4 );
 	                                        outbuf [1] = ( ( inbuf[1] & 0x0F ) << 4 ) | ( ( inbuf[2] & 0x3C ) >> 2 );
 	                                        outbuf [2] = ( ( inbuf[2] & 0x03 ) << 6 ) | ( inbuf[3] & 0x3F );
 	
 	                                        for( i = 0; i < ctcharsinbuf; i++ )
 	                                                [mutableData appendBytes:&outbuf[i] length:1];
 	                                }
 	
 	                                if( flbreak )  break;
 	                        }
 	                }
 	        }
 	
 	        self = [self initWithData:mutableData];
 	        return self;
}

#pragma mark -
 	
- (NSString *) base64Encoding {
 	        return [self base64EncodingWithLineLength:0];
}

- (NSString *) base64EncodingWithLineLength:(unsigned int) lineLength {
		        const unsigned char     *bytes = [self bytes];
	 	        NSMutableString *result = [NSMutableString stringWithCapacity:[self length]];
	 	        unsigned long ixtext = 0;
		        unsigned long lentext = [self length];
	 	        long ctremaining = 0;
	 	        unsigned char inbuf[3], outbuf[4];
	 	        unsigned short i = 0;
	 	        unsigned short charsonline = 0, ctcopy = 0;
	 	        unsigned long ix = 0;
	 	
	 	        while( YES ) {
		 	                ctremaining = lentext - ixtext;
			                if( ctremaining <= 0 ) break;
		 	
		 	                for( i = 0; i < 3; i++ ) {
			 	                        ix = ixtext + i;
			 	                        if( ix < lentext ) inbuf[i] = bytes[ix];
				                        else inbuf [i] = 0;
		 	                }
		 	
			                outbuf [0] = (inbuf [0] & 0xFC) >> 2;
		 	                outbuf [1] = ((inbuf [0] & 0x03) << 4) | ((inbuf [1] & 0xF0) >> 4);
		 	                outbuf [2] = ((inbuf [1] & 0x0F) << 2) | ((inbuf [2] & 0xC0) >> 6);
			                outbuf [3] = inbuf [2] & 0x3F;
		 	                ctcopy = 4;
			
		 	                switch( ctremaining ) {
				 	                case 1:
				 	                        ctcopy = 2;
				 	                        break;
				 	                case 2:
				 	                        ctcopy = 3;
				 	                        break;
		 	                }
		 	
		 	                for( i = 0; i < ctcopy; i++ )
	                        [result appendFormat:@"%c", encodingTable[outbuf[i]]];
	
	                for( i = ctcopy; i < 4; i++ )
	                        [result appendString:@"="];
 	
	                ixtext += 3;
 	                charsonline += 4;
 	
 	                if( lineLength > 0 ) {
	                        if( charsonline >= lineLength ) {
 	                                charsonline = 0;
 	                                [result appendString:@"\n"];
 	                        }
 	                }
 	        }
 	
 	        return [NSString stringWithString:result];
}
I'm sorry to bother everyone

and thank you for your suggestion
ohiyo1234 is offline   Reply With Quote
Old 10-27-2008, 06:57 AM   #2 (permalink)
New Member
 
Join Date: Oct 2008
Posts: 11
Default

i don't know how to use it. i tried to use them but nothing happen
ohiyo1234 is offline   Reply With Quote
Old 10-27-2008, 10:12 AM   #3 (permalink)
New Member
 
Join Date: Sep 2008
Posts: 1,431
Default

To use them #import the header file and do something like this:

Code:
NSData*     base64Data = [[NSData alloc] initWithBase64EncodedString:myBase64String];

NSString*  base64String = [myData base64Encodeing];
PhoneyDeveloper is offline   Reply With Quote
Old 03-22-2009, 03:08 PM   #4 (permalink)
Registered Member
 
Join Date: Dec 2008
Location: Oceanside, CA
Posts: 570
Default

Hi did u get the Base64 decoder/encoder to work? I had no luck with that?
The code u provided has problems won't compile
aryaxt is offline   Reply With Quote
Old 04-02-2009, 02:41 PM   #5 (permalink)
Registered Member
 
Join Date: Dec 2008
Location: Oceanside, CA
Posts: 570
Default

did u get it to work?

Last edited by aryaxt; 04-02-2009 at 03:00 PM.
aryaxt is offline   Reply With Quote
Old 06-17-2009, 01:21 PM   #6 (permalink)
Registered Member
 
Join Date: Dec 2008
Location: Oceanside, CA
Posts: 570
Default

You are such a loser man
aryaxt is offline   Reply With Quote
Old 08-15-2009, 05:09 PM   #7 (permalink)
Registered Member
 
Join Date: Feb 2009
Posts: 7
Default

Some typos in the code, change VQBase64 to Base64, Encodeing to Encoding.
beowulf573 is offline   Reply With Quote
Reply

Bookmarks

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



» Advertisements
» Online Users: 270
16 members and 254 guests
ADY, Alsahir, Dani77, Desert Diva, Duncan C, F_Bryant, Grinarn, HemiMG, jansan, linkmx, M@realobjects, macquitzon216, prchn4christ, smethorst, spiderguy84
Most users ever online was 1,187, 10-11-2011 at 08:09 AM.
» Stats
Members: 158,882
Threads: 89,228
Posts: 380,761
Top Poster: BrianSlick (7,129)
Welcome to our newest member, jansan
Powered by vBadvanced CMPS v3.1.0

All times are GMT -5. The time now is 01:45 PM.
Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0