iPhone:将nsdata强制转换为nsstring时的奇怪输出

时间:2013-06-07 12:17:33

标签: iphone casting nsstring nsdata nslog

在使用aes128解密有效负载后,我获得了一个NSData对象:

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

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

  

< 2db88b73 d84599a1 5779c736 09c975b7 92750cf2 d11cb41b 19f13781   4401bc57 b2ad96c8 402e3ccf 851c0219 00aec76b>

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

  

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

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

有人可以告诉我为什么以及在哪里寻找问题?

1 个答案:

答案 0 :(得分:1)

前一段时间与同一问题相撞,找到了答案here

如果数据不以空值终止,则应使用-initWithData:encoding:

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

如果数据以空值终止,则应使用-stringWithUTF8String:以避免结尾处的额外\ 0。

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

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