将NSString转换为NSData

时间:2012-10-05 13:25:57

标签: encryption casting nsstring nsdata nsstringencoding

有没有办法在NSData中存储NSString来维护 SAME 数据?

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

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


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

NSData nsdataString = @"Hello World!";


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

NSData *decryptedData = [encryptedData AES256DecryptWithKey:keyString];

其中encryptedData是NSData,keyString是NSString。

非常感谢大家!

1 个答案:

答案 0 :(得分:0)

简答:不。

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

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

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

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