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

#ios #objective-c #nsstring #nsdata

#iOS #objective-c #nsstring #nsdata

Вопрос:

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

Комментарии:

1. Все разумные решения будут выглядеть примерно так, как сообщение Мэтта Галлахера, на которое вы ссылались.

2. Вот как найти библиотеку Галлахера, которую люди таинственным образом использовали [NSData dataFromBase64String] без ссылки

3. По какой-то непонятной причине Apple никогда не предоставляла «встроенную» поддержку Base64, но все комплекты сторонних производителей практически идентичны. Просто выберите одну.

Ответ №1:

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


Пример

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

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

Комментарии:

1. Я загрузил два, так что мне нужно добавить этот проект в свой или я могу просто перетащить NSData Base64?

2. Вы хотите добавить два файла в свой проект. Обычно, когда вы видите такие имена, NSData Base64 первое, что должно прийти вам в голову, это то, что это категория в NSData классе. Другими словами, вы вызываете эти новые методы только с использованием NSData , а не какого-то нового Base64 класса.

3. Однако я считаю, что вам все равно нужно импортировать категорию. Лично я бы рекомендовал поместить это в ваш предварительно скомпилированный заголовок, чтобы вы могли использовать методы на NSData из любого места вашего проекта.

4. как я могу это сделать, Райан? не могли бы вы дать мне несколько советов, я думаю, что это самый простой способ сделать это

5. Я бы подумал, что примера кода в моем ответе было бы достаточно… Не могли бы вы уточнить, какие указатели вам нужны?

Ответ №2:

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

Ответ №3:

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

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

Комментарии:

1. Это было добавлено в iOS 7 / OSX 10.9, и это лучшее решение, предлагаемое здесь. Документация здесь .

Ответ №4:

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

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

  #import "NSData Base64.h"
  

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

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

Комментарии:

1. Все, что я получаю, это файл ‘NSData Base64.h’, который не найден. 😞

2. @Martin Я использовал классы, созданные библиотекой sudzc , она создает для вас этот класс, который вы затем можете импортировать в свой файл реализации (.m)

Ответ №5:

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

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

Ответ №6:

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