我有一个 NSData 对象,我正在尝试使用以下代码行将其转换为 NSString:
NSString *theData = [[NSString alloc] initWithData:photo encoding:NSASCIIStringEncoding];
不幸的是,我得到了以下结果,而不是我想要的二进制输出(我可以期待二进制输出吗?);
ÿØÿà
我会很感激任何帮助。
谢谢。瑞奇。
如果您想将一些任意二进制数据转换为人类可读的字符串(例如,一系列十六进制值),则您使用了错误的方法。您正在做的是将数据本身解释为 ASCII 编码的字符串。
要将数据简单地记录到文件或标准输出,您可以使用[theData description]
.
您所说的“二进制输出”是什么意思尚不清楚。如果您希望字符串包含“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]];
}
您无法使用 initWithData: 方法解析二进制数据。如果你想要内容的十六进制字符串,那么你可以使用description
NSData 的方法。