NSData для отображения в виде строки - PullRequest
43 голосов
/ 16 апреля 2010

Я создаю приложение для iPhone и придерживаюсь следующего:

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

Журнал показывается как:

hashedData = <abcdefgh abcdefgh abcdefgh abcdefgh abcdefgh abcdefgh abcdefgh abcdefgh>
  • примечание hashedData - это NSData, а не NSString

Но мне нужно преобразовать hashedData в NSString, которая выглядит следующим образом:

NSString *someString = @"abcdefghabcdefghabcdefghabcdefghabcdefghabcdefghabcdefghabcdefgh";

Так что в основном результат должен быть похож на hashedData, за исключением того, что я не хочу, чтобы угловые скобки и пробелы были между ними.

Ответы [ 3 ]

64 голосов
/ 16 апреля 2010

Используйте NSString initWithData: encoding: method.

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

(изменить, чтобы ответить на ваш комментарий:)

В этом случае, ответ Иисуса Навина действительно помогает:

NSCharacterSet *charsToRemove = [NSCharacterSet characterSetWithCharactersInString:@"< >"];
NSString *someString = [[hashedData description] stringByTrimmingCharactersInSet:charsToRemove];
22 голосов
/ 16 апреля 2010

Я нашел решение и думаю, что был глуп.

В основном все, что мне нужно было сделать, это:

NSString *someString = [NSString stringWithFormat:@"%@", hashedData]; // заставить NSData стать NSString

Еще раз спасибо всем, кто пытался помочь, очень признателен.

2 голосов
/ 16 апреля 2010

Определите NSCharacterSet , который содержит ошибочные символы, а затем отфильтруйте строку, используя -stringByTrimmingCharactersInSet:.

...