将 NSData 转换为 NSString 并再次转换为 NSData?

Posted

技术标签:

【中文标题】将 NSData 转换为 NSString 并再次转换为 NSData?【英文标题】:Convert NSData to NSString and convert again to NSData? 【发布时间】:2014-09-08 11:22:53 【问题描述】:

我有这段代码在我的 ios 中获取一个文件,将其转换为 NSData 并将其转换为 NSString:

NSFileManager *filemgr;

filemgr = [NSFileManager defaultManager];

NSData *files = [filemgr contentsAtPath:databasePath];

NSData *databuffer = [filemgr contentsAtPath:databasePath];

NSString *string = [NSString stringWithFormat:@"%@",databuffer];

我只想知道是否有可能将此 NSString 转换为 NSData 并使用 NSFileManager 通过 NSData 将文件重新保存为原始格式?

【问题讨论】:

***.com/questions/6411965/… 试试。 你需要解释想要一个 NSString 表示的目的。 【参考方案1】:

stringWithFormat 是调用 NSData 的 description 方法的昂贵方式。这只会产生一个十六进制转储。而且,我们被告知,Apple 不保证 description 方法生成的格式将来不会更改,因此它只能用于诊断目的。

如果您想将 NSData 转换为字符串格式以便可以将其作为字符串传输,您应该使用 Base64 编码。如果 NSData 实际上是字符信息,则应使用适当的字符串编码将其转换为 NSString。

【讨论】:

【参考方案2】:

要将NSData 转换为NSString,请使用:

NSString *string = [[NSString alloc] initWithData:data encoding: NSUTF8StringEncoding];`

假设数据使用NSUTF8StringEncoding 编码(一个不错的选择)。

要将NSString 转换为NSData

NSData *data = [string dataUsingEncoding: NSUTF8StringEncoding];`

假设数据编码应该是NSUTF8StringEncoding(一个不错的选择)。

你需要做一些研究/研究 NSData 和 NSString 之间的区别。

【讨论】:

以上是关于将 NSData 转换为 NSString 并再次转换为 NSData?的主要内容,如果未能解决你的问题,请参考以下文章

使用正确的类型将 NSValue 转换为 NSData 并再次返回

如何将NSString值转换为NSData?

将 NSData 转换为 NSString 返回 nil

将 NSString 转换为 NSData 是不是会强制使用尾随字节?

将 NSData 转换为 NSString 的空结果

将 UTF-8 编码的 NSData 转换为 NSString