#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).