有没有办法在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。
非常感谢大家!
答案 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方法。但是,如果你想在任何时候想要一个有用的字符串,你仍然需要记住编码。