【问题标题】:iPhone: strange output when casting nsdata to nsstringiPhone:将 nsdata 转换为 nsstring 时输出奇怪
【发布时间】:2013-06-07 12:17:33
【问题描述】:

在使用 aes128 解密有效负载后,我得到一个 NSData 对象作为回报:

NSData *returnData = [ciphertext AES128DecryptWithKey:keyData withIV:ivData];

当我尝试 NSLog 这个时,我得到以下十六进制输出:

然后我尝试将其设置为 NSString:

[[NSString alloc] initWithData:returnData 编码:NSUTF8StringEncoding];

当在字符串上使用NSLog() 时,我得到"(null)" 作为输出。

谁能告诉我为什么以及我应该在哪里寻找问题?

【问题讨论】:

  • 您确定您使用的编码正确吗?
  • 明文应该是什么样子?在我看来,NSData 不是合法的 UTF8。可能不是任何字符集中的合法字符。 (有人会怀疑解密失败。)

标签: iphone casting nsstring nsdata nslog


【解决方案1】:

前段时间碰到同样的问题,找到答案here。

如果数据不是以null结尾的,你应该使用-initWithData:encoding:

NSString* newStr = [[[NSString alloc] initWithData:theData
                                     encoding:NSUTF8StringEncoding] autorelease];

如果数据以 null 结尾,则应改为使用 -stringWithUTF8String: 以避免末尾的额外 \0。

NSString* newStr = [NSString stringWithUTF8String:[theData bytes]];

(如果您启用了 ARC,请删除 -autorelease 调用。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2012-11-09
    • 2011-11-11
    相关资源
    最近更新 更多