我有一个NSData对象,我试图使用以下代码行转换为NSString:
NSString *theData = [[NSString alloc] initWithData:photo encoding:NSASCIIStringEncoding];
不幸的是我得到了以下结果,而不是我想要的二进制输出(我可以期待这里的二进制输出吗?);
ÿØÿà
我很感激任何帮助 谢谢。瑞奇。
答案 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
方法。