2010-04-16 95 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

相關問題