दिलचस्प पोस्ट
ये संख्याएं समान क्यों नहीं हैं? डेक्स मर्ज करने में असमर्थ Bash: समवर्ती नौकरियों की संख्या को सीमित करें? IOS 8 UITableView विभाजक inset 0 काम नहीं कर रहा है एक वेब पेज के लोड और निष्पादन अनुक्रम? सभी नियंत्रक और विचारों के लिए वैश्विक चर एक सूची से एक यादृच्छिक तत्व को पॉप करने का सबसे अजगर तरीका क्या है? नए DialogPreference वर्ग लिखने का संक्षिप्त तरीका? मैं जावा में दिनांक प्रारूप कैसे बदल सकता हूँ? HTML इनपुट = "फ़ाइल" विशेषता फ़ाइल प्रकार स्वीकार करें (CSV) एक सरणी की चाबियाँ मुद्रित करें JQuery का उपयोग करते हुए JSON सरणी से अद्वितीय परिणाम प्राप्त करें एक सूची संग्रह से एक सामान्य सूची में आइटम संग्रह कास्टिंग करना एक्सएचटीएमएल स्व-निहित टैग को छोड़कर RegEx मैच खुली टैग लघु टैग (<?) को PHP में कैसे सेट करना है?

एनएसडीटा को बेस 64 में परिवर्तित करना

NSData को base64 कैसे परिवर्तित किया जाए मेरे पास NSData और base64 में कनवर्ट करना है मैं यह कैसे कर सकता हूँ?

Solutions Collecting From Web of "एनएसडीटा को बेस 64 में परिवर्तित करना"

संपादित करें

ओएस एक्स 10.9 / आईओएस 7 के अनुसार, यह चौखटे में बनाया गया है।

देखें -[NSData base64EncodedDataWithOptions:]


IOS7 / OS X 10.9 से पहले:

मैट गैलाघर ने इस विषय पर एक लेख लिखा था नीचे वह iPhone के लिए अपने एम्बेड करने योग्य कोड का लिंक देता है।

मैक पर आप ओपनएसएसएल लाइब्रेरी का उपयोग कर सकते हैं, आईफोन पर वह अपने स्वयं के निहितार्थ लिखता है

 //from: http://cocoadev.com/BaseSixtyFour + (NSString*)base64forData:(NSData*)theData { 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] autorelease]; } 

एक अद्यतन के रूप में, NSData (NSDataBase64Encoding) एसडीके के पास NSData (NSDataBase64Encoding) पर एक श्रेणी है

 -[NSData base64EncodedStringWithOptions:] -[NSData initWithBase64EncodedString:options:] -[NSData initWithBase64EncodedData:options:] -[NSData base64EncodedDataWithOptions:] 

अपनी श्रेणी पद्धति को रोल करने से बचने से बचें

सुपर आसान ड्रॉप-इन Google लायब्ररी कोड यहाँ।

बस एक उदाहरण प्राप्त करने के लिए +rfc4648Base64StringEncoding का उपयोग करें, फिर encode / decode फ़ंक्शन का उपयोग करें।

यह एक खूबसूरत चीज है (जड़ से हेडर फाइल और GTMDefines.h शीर्षलेख को प्राप्त करने के लिए मत भूलना, हालांकि।)

यह आसान नहीं है। जैसे कि सी या ओबीजे-सी में इसके लिए कोई समर्थन नहीं है ये है कि मैं क्या कर रहा हूँ (मूल रूप से सीएल मेरे लिए क्या कर रहा है):

 - (NSString *)_base64Encoding:(NSString *) str { 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:[str dataUsingEncoding: NSASCIIStringEncoding]]; [inHandle closeFile]; [task waitUntilExit]; outData = [outHandle readDataToEndOfFile]; if (outData) { NSString *base64 = [[[NSString alloc] initWithData:outData encoding:NSUTF8StringEncoding] autorelease]; if (base64) return base64; } return nil; } 

और आप इसे इस तरह प्रयोग करते हैं:

 NSString *b64str = [strToConvert _base64Encoding:strToConvert]; 

और यह मेरा कोड नहीं है – मुझे इसे यहां मिले: http://www.cocoadev.com/index.pl?BaseSixtyFour और यह महान काम करता है। आप हमेशा इसे + () विधि में बदल सकते हैं।

ओह, और अपने एनएसडीटा को इस विधि के लिए एक NSString प्राप्त करने के लिए:

 NSString *str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 

आईओएस हमेशा बेस 64 एन्कोडिंग और डीकोडिंग के लिए समर्थन में बनाया गया है। यदि आप resolv.h पर देखते हैं तो आपको दो फ़ंक्शन b64_ntop और b64_pton को देखना चाहिए। स्क्वायर सॉकेटरॉकेट लाइब्रेरी उद्देश्य-सी से इन फ़ंक्शन का उपयोग करने का एक उचित उदाहरण प्रदान करता है

ये फ़ंक्शन बहुत अच्छी तरह से जांच और विश्वसनीय हैं – कई कार्यान्वयन के विपरीत आप यादृच्छिक इंटरनेट पोस्टिंग में पा सकते हैं। libresolv.dylib खिलाफ लिंक करने के लिए मत भूलना

यदि आप आईओएस 7 एसडीके के खिलाफ लिंक करते हैं, तो आप नए तरीकों initWithBase64Encoding: उपयोग कर सकते हैं initWithBase64Encoding: और base64EncodedDataWithOptions: :। ये पिछले रिलीज में मौजूद हैं, लेकिन निजी थे इसलिए यदि आप 6 एसडीके के खिलाफ लिंक करते हैं, तो आप अपरिभाषित व्यवहार में चला सकते हैं। यह 7 एसडीके के खिलाफ लिंक करते समय इसका उपयोग करने का उदाहरण होगा:

 #ifndef __IPHONE_7_0 // oh no! you are using something unsupported! // Call and implementation that uses b64_pton here #else data = [[NSData alloc] initWithBase64Encoding:string]; #endif 

मैंने अपनी आवश्यकताओं को पूरा करने के लिए उपरोक्त कोड को संशोधित किया, एक HTTP पोस्ट का निर्माण किया। मैं NSString चरण को छोड़ने में सक्षम था, और BASE64 कोड में लाइन ब्रेक शामिल करता है, जो कम से कम एक वेब सर्वर को अधिक स्वादिष्ट पाया जाता है:

 #define LINE_SIZE 76 //originally from: http://www.cocoadev.com/index.pl?BaseSixtyFour // via joshrl on stockoverflow - (void) appendBase64Of: (NSData *)inData to:(NSMutableData *)outData { const uint8_t* input = (const uint8_t*)[inData bytes]; NSInteger length = [inData length]; static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; uint8_t buf[LINE_SIZE + 4 + 2]; size_t n = 0; 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]); } } buf[n + 0] = table[(value >> 18) & 0x3F]; buf[n + 1] = table[(value >> 12) & 0x3F]; buf[n + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '='; buf[n + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '='; n += 4; if (n + 2 >= LINE_SIZE) { buf[n++] = '\r'; buf[n++] = '\n'; [outData appendBytes:buf length:n]; n = 0; } } if (n > 0) { buf[n++] = '\r'; buf[n++] = '\n'; [outData appendBytes:buf length:n]; } return; }