1

我有一个 NSData 对象,我正在尝试使用以下代码行将其转换为 NSString:

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

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

ÿØÿà

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

4

3 回答 3

4

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

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

于 2010-03-16T11:47:16.803 回答
2

您所说的“二进制输出”是什么意思尚不清楚。如果您希望字符串包含“01010100011110110”或“0x1337abef”行中的文本,那么您就误解了 NSString 的工作原理。NSStringinitWithData: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]];
}
于 2010-03-17T02:28:08.887 回答
0

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

于 2010-03-16T11:48:44.510 回答