【问题标题】:NSData to display as a stringNSData 显示为字符串
【发布时间】:2011-02-08 20:16:17
【问题描述】:

我正在构建一个 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 一样,除了我不想要尖括号和中间的空格。

【问题讨论】:

    标签: iphone nsstring nsdata


    【解决方案1】:

    使用 NSString initWithData:encoding: 方法。

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

    (编辑以回应您的评论:)

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

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

    【讨论】:

    • 嗨,诺亚,感谢您的回答。我实际上已经尝试过,但它不起作用。当我从 NSLog 打印时,它显示了一串非 ascii 字符,例如“u×§v”,我只需要删除原始问题中提到的尖括号和空格。
    • stringByTrimmingCharactersInSet 仅从末端删除,因此中间仍然存在空格。这只会删除尖括号。
    • 也许你的字符串不是ascii编码的?也许您需要改用 UTF8(传递 NSUTF8StringEncoding 而不是 NSASCIIStringEncoding)
    【解决方案2】:

    我找到了解决方案,但我认为我很愚蠢。

    基本上我所要做的就是:

    NSString *someString = [NSString stringWithFormat:@"%@", hashedData]; //强制NSData变成NSString

    再次感谢所有试图提供帮助的人,非常感谢。

    【讨论】:

    • 你好,你是如何将 someString 中的数据转换回 NSData 的?
    【解决方案3】:

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

    【讨论】:

    • 谢谢约书亚。我真正的问题是 hashedData 是 NSData,而不是 NSString,所以我怀疑你的答案是否可行。
    • 抱歉,我从您的原始帖子中假设您已经有一个字符串。
    猜你喜欢
    • 2019-02-15
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多