1. ホーム
  2. iphone

[解決済み] NSData を String に変換しますか?

2022-02-25 16:29:35

質問

opensslの秘密鍵EVP_PKEYをnsdataとして保存しています。このために、以下のコードを使用してバイト・ストリームにシリアライズしています。

unsigned char *buf, *p;
int len;
len = i2d_PrivateKey(pkey, NULL);
buf = OPENSSL_malloc(len); 
p = buf;
i2d_PrivateKey(pkey, &p);

ここで、pkeyはEVP_PKEY型です。 次に、以下の行を使用して、バッファ 'p' から NSData としてバイトを格納します。

NSData *keydata = [NSData dataWithBytes:P length:len];

これを以下のコードでNSStringに変換していますが、コンソールにプリントすると、他の文字が表示されます。

NSString *content =[ NSString stringWithCString:[keydata bytes] encoding:NSUTF8StringEncoding];

誰か助けてください。

<ブロッククオート

基本的に、私はEVP_PKEYを保存したい。 をSQLiteデータベースに格納します。

私は正しい道を歩んでいるのでしょうか? ありがとうございます。

どのように解決するのですか?

オブジェクティブC

を使用することができます(参照)。 NSString クラスリファレンス )

- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding

NSString *myString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];

備考 : に注目してください。 NSData の値は、指定されたエンコーディング(上の例ではUTF-8)に対して有効でなければなりません。 nil が返されます。

何らかの理由で初期化に失敗した場合(例えば、dataがエンコードに有効なデータを表していない場合)、nilを返します。

Swift 3.0以前

String(data: yourData, encoding: NSUTF8StringEncoding)

Swift 3.0 以降

String(data: yourData, encoding: .utf8)

参照 文字列#init(データ:エンコーディング:) を参照してください。