NSData如何转换为字符串进行显示

43

我正在开发一款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

使用NSString的initWithData:encoding:方法。

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

在这种情况下,Joshua的回答确实有帮助:

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

http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#jumpTo_67 - James Sumners
1
嗨,Noah,谢谢你的回答。我实际上已经尝试过了,但它不起作用。当我从NSLog打印时,它显示了一串非ASCII字符的字符串,如'uקv'。我只需要按照我的原始问题中提到的那样删除尖括号和空格。 - topace
1
stringByTrimmingCharactersInSet仅从两端删除字符,因此空格仍将存在于中间。这只会删除尖括号。 - lilbyrdie
1
也许你的字符串不是ASCII编码的?也许你需要使用UTF8(传递NSUTF8StringEncoding而不是NSASCIIStringEncoding)? - evanflash

21

我已经找到了解决方案,我认为我之前很傻。

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

NSString *someString = [NSString stringWithFormat:@"%@", hashedData]; //将 NSData 强制转换为 NSString

再次感谢所有尝试过帮助我的人们,非常感激。


1
嘿,你是怎么把 someString 中的数据转换回 NSData 的? - mukaissi

2
定义一个包含有敏感字符的 NSCharacterSet,然后使用 -stringByTrimmingCharactersInSet: 过滤你的字符串。

谢谢,Joshua。我的真正问题是hashedData是NSData类型,而不是NSString类型,所以我怀疑你的答案可行性。 - topace
很抱歉,我以为你在原始帖子中已经拥有了一个字符串。 - Joshua Nozzi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接