2012-10-05 83 views
0

有没有什么办法可以在保存SAME数据的NSData中存储NSString?

实例(这是好的,但它不是我所需要的):
铸造NSString到NSData

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


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

NSData nsdataString = @"Hello World!"; 


简而言之:我需要使用NSData,就好像它是NSString的相同(如使用演员操作符)。此方法对于预加载加密的核心数据sqlite数据库(在NSString中)以及仅在用户访问持久存储区域时才会解密非常有用。 要解密我用:

NSData *decryptedData = [encryptedData AES256DecryptWithKey:keyString]; 

其中的EncryptedData是NSData的KeyString中和是一个的NSString。

非常感谢大家!

回答

0

简答题:没有。

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

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

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

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

+0

非常感谢! – dman