Преобразование между строками NSData и base64

Какой самый простой и быстрый код для преобразования между NSData а строка base64? Я прочитал множество решений в SO, и в основном они связаны с добавлением другого класса и т. Д. Я нашел здесь отличное решение, но оно слишком сложное.

5 ответов

Решение

Прокрутите вниз до раздела Заключение на странице, на которую вы ссылаетесь, и загрузите предоставленные файлы NSData+Base64. Это лучшее решение, которое я когда-либо видел, и невероятно простое в использовании. Если вы можете узнать что-нибудь о Какао, вы можете научиться использовать этот проект.


пример

NSString *originalString = [NSString stringWithFormat:@"test"]; 
NSData *data = [NSData dataFromBase64String:originalString];  
NSLog([data base64EncodedString]); 

Выше будет распечатывать исходную строку после преобразования ее в base64 и обратно в обычную некодированную строку.

Начиная с iOS 7, NSData теперь напрямую предоставляет эту функциональность с новыми методами -base64EncodedDataWithOptions: а также -base64EncodedStringWithOptions:, (Опции позволяют вам указать, что строка должна быть / должна быть перенесена в строку, тем лучше справляться с электронной почтой и отображением пользователя.)

Вам не нужно никаких пользовательских реализаций. Создание base64 из NSData показано в других ответах. Есть противоположное направление. От строки Base64 до NSData:

 NSString *base64Encoded = @"some base64 string";
 NSData *nsdataFromBase64String = [[NSData alloc] initWithBase64EncodedString:base64Encoded options:0];

Имейте в виду, что есть больше форматов Base64.

Например, JWT используют безопасный формат URL.

В итоге я использовал тот же класс, что и SUDZC

реализация была легкой, сначала я сделал импорт

 #import "NSData+Base64.h"

тогда я смог назвать свои данные.

 NSData *data = [[NSData alloc] initWithData:[NSData dataWithBase64EncodedString:strData]];

Или вы можете взглянуть на (совершенно новый) пример проекта CryptoCompatibility, я думаю, что есть класс-оболочка для работы с base64. Это образец MacOS, но он использует библиотеку libresolve.dylib, которая, я думаю, доступна и для iOS (это можно увидеть по крайней мере здесь, в iOS7).

Другие вопросы по тегам