web-dev-qa-db-fra.com

Conversion entre chaînes NSData et base64

Quel est le code le plus simple et le plus rapide pour effectuer une conversion entre NSData et une chaîne base64? J'ai lu un tas de solutions sur SO et elles impliquent principalement l'ajout d'une autre classe, etc. J'ai trouvé une excellente solution ici mais c'est trop complexe.

39
aherlambang

Faites défiler la section Conclusion sur la page que vous avez liée et téléchargez les fichiers NSData + Base64 fournis . C'est la meilleure solution que j'ai vue jusqu'à présent et elle est incroyablement facile à utiliser. Si vous pouvez apprendre quelque chose sur Cocoa, vous pouvez apprendre à utiliser ce projet.


Exemple

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

Ce qui précède imprimera la chaîne d'origine après l'avoir convertie en base64 et en une chaîne normale non codée.

56
Ryan Wersal

Depuis iOS 7, NSData fournit maintenant directement cette fonctionnalité avec les nouvelles méthodes -base64EncodedDataWithOptions: et -base64EncodedStringWithOptions: . (Les options vous permettent de spécifier que la chaîne est/doit être renvoyée à la ligne, afin de mieux gérer le courrier électronique et les affichages destinés aux utilisateurs.)

41
Sixten Otto

Vous n'avez besoin d'aucune implémentation personnalisée. La création de base64 à partir de NSData est présentée dans d'autres réponses. Il y a une direction opposée. De la chaîne Base64 à NSData:

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

J'ai fini par utiliser cette même classe fournie par SUDZC

la mise en œuvre était facile d'abord j'ai fait une importation 

 #import "NSData+Base64.h"

alors j'ai pu appeler mes données.

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

Ou vous pouvez jeter un oeil au (tout nouveau) CryptoCompatibility exemple de projet, je pense qu’il existe une classe wrapper pour les opérations en base64. C'est un exemple MacOS mais il utilise la bibliothèque libresolve.dylib avec, je pense, également disponible sur iOS (voyez-le au moins ici dans iOS7).

0
Stephan

Sachez qu'il existe plus de formats Base64.

Par exemple, les fichiers JWT utilisent un format sûr URL .

0
meaning-matters