0

同じデータを維持する NSData に NSString を格納する方法はありますか?

例(これは問題ありませんが、必要なものではありません):

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


私はこのようなものが必要です(明らかに失敗します):

NSData nsdataString = @"Hello World!";


簡単に言えば、NSStringのSAMEであるかのように(キャスト演算子を使用するなど) 、NSDataを使用する必要があります。このアプローチは、暗号化されたコア データ sqlite データベース (NSString 内) をプリロードし、ユーザーが永続ストアのフィールドにアクセスする場合にのみ復号化するのに非常に役立ちます。復号化するには、次を使用します。

NSData *decryptedData = [encryptedData AES256DecryptWithKey:keyString];

encryptedData は NSData であり、keyString は NSString です。

みんな、どうもありがとう!

4

1 に答える 1

0

短い答え:いいえ。

NSData オブジェクトは、1 と 0 の生のシーケンスのラッパーです。NSString オブジェクトは、公開されていないエンコーディングの Unicode 文字の配列のラッパーです。

NSData の書き込みに使用される文字列エンコーディングに応じて、多数の異なる文字列を表すことができます。例: 同じ文字を表すリトルエンディアン UTF16 とビッグエンディアン UTF16 文字列は異なって見え、UTF-8 文字列を UTF-16 として解析しようとすると意味不明になります。

これが、文字列として扱う前に、常に NSData を NSString に変換する必要がある理由です。エンコーディングを指定するまで、文字列ではないためです。生の 1 と 0 だけです。

あなたの質問から、なぜこれをやりたいのか正確にはわかりませんが、NSData の -bytes メソッドで取得できる C 文字列 (NSString の代わりに) を使用して必要なことを達成できる可能性があります。ただし、いつでも有用な文字列を作成したい場合は、エンコーディングを念頭に置く必要があります。

于 2012-10-17T21:43:46.907 に答える