将NSData转换为NSString表示失败

时间:2010-03-16 11:06:42

标签: cocoa nsstring nsdata

我有一个NSData对象,我试图使用以下代码行转换为NSString:

NSString *theData = [[NSString alloc] initWithData:photo encoding:NSASCIIStringEncoding];

不幸的是我得到了以下结果,而不是我想要的二进制输出(我可以期待这里的二进制输出吗?);

ÿØÿà

我很感激任何帮助 谢谢。瑞奇。

3 个答案:

答案 0 :(得分:4)

如果要将某些任意二进制数据转换为人类可读的字符串(例如,一系列十六进制值),则使用错误的方法。你正在做的是将数据本身解释为ASCII编码的字符串。

要简单地将数据记录到文件或标准输出,您可以使用[theData description]

答案 1 :(得分:2)

“二进制输出”的含义尚不清楚。如果您希望字符串包含“01010100011110110”或“0x1337abef”行的文本,那么您会错误地了解NSString的工作原理。 NSString的initWithData:encoding:尝试将数据的字节解释为特定编码中字符串的字节。它与NSString的dataUsingEncoding:相反 - 您可以使用initWithData:encoding:的结果调用dataUsingEncoding:并获取完全相同的字符串。

如果您想将数据转换为人类可读的十六进制数字字符串,您需要自己进行转换。你可以这样做:

NSMutableString *binaryString = [NSMutableString stringWithCapacity:[data length]];
unsigned char *bytes = [data bytes];
for (int i = 0; i < [data length]; i++) {
    [binaryString appendFormat:@"%02x", bytes[i]];
}

答案 2 :(得分:0)

您无法使用initWithData:方法解析二进制数据。如果你想要内容的十六进制字符串,那么你可以使用NSData的description方法。