0

有没有办法将 NSString 存储在维护相同数据的 NSData 中?

示例(这很好,但这不是我需要的):

NSString *tmpString = @"Hello World!";
NSData *nsdataString = [tmpString dataUsingEncoding:NSUTF8StringEncoding];


我需要这样的东西(显然失败):

NSData nsdataString = @"Hello World!";


简而言之:我需要像使用 NSData 一样使用 NSData (就像使用强制转换运算符一样)。这种方法对于预加载加密的核心数据 sqlite 数据库(在 NSString 中)非常有用,并且仅当用户访问持久存储的字段时才解密。要解密我使用:

NSData *decryptedData = [encryptedData AES256DecryptWithKey:keyString];

其中 encryptedData 是一个 NSData,而 keyString 是一个 NSString。

非常感谢大家!

4

1 回答 1

0

简短的回答:没有。

NSData 对象是原始 1 和 0 序列的包装器。NSString 对象是未公开的编码中 Unicode 字符数组的包装器。

根据用于编写 NSData 的字符串编码,它可以表示许多不同的字符串。例如:代表相同字符的 little-endian UTF16 和 big-endian UTF16 字符串看起来会有所不同,并且尝试将 UTF-8 字符串解析为 UTF-16 会给您带来乱码。

这就是为什么在将 NSData 视为字符串之前必须将其转换为 NSString 的原因:因为在指定编码之前,它不是字符串;它只是原始的一和零。

从您的问题中我不确定您为什么要这样做,但是您可以使用 C 字符串(而不是 NSString)来完成您需要做的事情,您可以使用 NSData 的 -bytes 方法获得它。但是,如果你想在任何时候得到一个有用的字符串,你仍然需要记住编码。

于 2012-10-17T21:43:46.907 回答