2010-04-16 97 views
43

我建立一个iPhone应用程序,并坚持以下几点:的NSData显示为一个字符串

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"; 

所以基本上结果需要像哈希数据,但我不想尖括号和之间的空格。

回答

22

我已经找到了解决方案,我觉得我太傻了。

基本上所有我需要做的是:

NSString *someString = [NSString stringWithFormat:@"%@", hashedData]; //迫使NSData成为NSString

再次感谢所有谁试图帮助,非常感谢。

+1

嗨,你是如何将someString中的数据转换回NSData的? – mukaissi 2014-04-30 18:30:23

2

定义一个包含违规字符的NSCharacterSet,然后使用-stringByTrimmingCharactersInSet:筛选字符串。

+0

谢谢约书亚。我真正的问题是哈希数据是NSData,而不是NSString,所以我怀疑你的答案是可行的。 – topace 2010-04-16 15:31:39

+0

对不起,我从你原来的文章中认为你已经有了一个字符串。 – 2010-04-16 18:39:27

64

使用NSString initWithData:encoding:方法。

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

(编辑向您的评论:)

在这种情况下做出反应,约书亚的答案确实帮助:

NSCharacterSet *charsToRemove = [NSCharacterSet characterSetWithCharactersInString:@"< >"]; 
NSString *someString = [[hashedData description] stringByTrimmingCharactersInSet:charsToRemove]; 
+0

http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#jumpTo_67 – 2010-04-16 13:52:47

+1

嗨,诺亚,谢谢你的回答。我已经尝试过,但它不起作用。当我从NSLog打印时,它显示了一串非ascii字符,如'uקv' 我只需要尖括号和空格,就像我原来的问题中提到的那样。 – topace 2010-04-16 15:13:14

+1

stringByTrimmingCharactersInSet只从两端删除,所以空格将仍然存在于中间。这只会删除尖括号。 – lilbyrdie 2011-06-23 15:18:42

相关问题