web-dev-qa-db-fra.com

NSData à afficher sous forme de chaîne

Je crée une application iPhone et je suis coincé avec les éléments suivants:

unsigned char hashedChars[32];
CC_SHA256([inputString UTF8String], [inputString lengthOfBytesUsingEncoding:NSASCIIStringEncoding], hashedChars);
NSData *hashedData = [NSData dataWithBytes:hashedChars length:32];
NSLog(@"hashedData = %@", hashedData);

Le journal s'affiche comme:

hashedData = <abcdefgh abcdefgh abcdefgh abcdefgh abcdefgh abcdefgh abcdefgh abcdefgh>
  • note hashedData est NSData, pas NSString

Mais ce dont j'ai besoin, c'est de convertir hashedData en NSString qui ressemble à:

NSString *someString = @"abcdefghabcdefghabcdefghabcdefghabcdefghabcdefghabcdefghabcdefgh";

Donc, fondamentalement, le résultat doit être comme hashedData, sauf que je ne veux pas les crochets et les espaces entre les deux.

43
topace

J'ai trouvé la solution et je pense que j'étais stupide.

Fondamentalement, je n'avais qu'à faire:

NSString *someString = [NSString stringWithFormat:@"%@", hashedData]; // forçant le NSData à devenir NSString

Encore une fois merci à tous ceux qui ont essayé d'aider, très apprécié.

22
topace

Utilisez la méthode NSString initWithData: encoding :.

NSString *someString = [[NSString alloc] initWithData:hashedData encoding:NSASCIIStringEncoding];

(modifier pour répondre à votre commentaire :)

Dans ce cas, la réponse de Joshua aide:

NSCharacterSet *charsToRemove = [NSCharacterSet characterSetWithCharactersInString:@"< >"];
NSString *someString = [[hashedData description] stringByTrimmingCharactersInSet:charsToRemove];
64
Noah Witherspoon

Définissez un NSCharacterSet qui contient les caractères incriminés, puis filtrez votre chaîne à l'aide de -stringByTrimmingCharactersInSet :.

2
Joshua Nozzi