質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Q&A

解決済

2回答

9191閲覧

NSStringとバイナリデータ

doe

総合スコア14

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

0グッド

0クリップ

投稿2015/04/20 15:46

編集2015/04/21 00:50

NSString型の文字列をNSData型に変換しました。

lang

1NSString* string = [[NSString alloc] initWithString:@"テスト文字列"];//① 2NSData* data = [string dataUsingEncoding:NSUTF8StringEncoding]; 3NSLog(@"%@",data);

結果:<e38386e3 82b9e383 88e69687 e5ad97e5 8897>
ここからが質問の本題なのですが、

lang

1NSString* string = [[NSString alloc] initWithString:@"e38386e3 82b9e383 88e69687 e5ad97e5 8897"];

上記の文字列を①で生成した「テスト文字列」に戻したいのですがどうすれば良いでしょうか。

※NSData型をNSString型に変換したいのではなく、「バイナリデータの文字列」を復元したいです。
@"e38386e3 82b9e383 88e69687 e5ad97e5 8897"->@"テスト文字列"
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

投稿ミスです

投稿2015/04/21 01:47

編集2015/04/22 10:34
at1994

総合スコア202

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

「バイナリデータの文字列」という言葉の意味がよくわかりませんが、できるかぎりの解説を試みます。

NSDataは、つまるところ、オブジェクト指向的にラッピングされたバイト列です。
ここでは、元となった文字列"テスト文字列"をUTF-8でエンコードした結果の

e38386 e382b9 e38388 e69687 e5ad97 e58897
テ ス ト 文 字 列

が格納されています。

これを元の文字列である"テスト文字列"に戻したいのであれば、NSStringクラスのinitWithBytesを使います。

lang

1[[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSUTF8StringEncoding];

そうではなくて、"e38386e382b9e38388e69687e5ad97e58897"のようなバイナリデータの16進数ダンプが欲しいなら、以下が参考になるかと思います。

http://tama.hatenablog.jp/entry/2013/06/12/233156

投稿2015/04/20 20:28

chokojori

総合スコア971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

doe

2015/04/21 00:41

ご回答頂きありがとうございます。 少しわかりにくい説明・質問で申し訳ありません。 ご回答頂いた方法は, NSData型(バイト列)からNSString型への変換方法だと思います。 得たい情報は、 NSData型からNSString型への変換方法ではなく、 NSString型(@"e38386 e382b9 e38388 e69687 e5ad97 e58897"という文字列が入った変数)からNSString型(@"テスト文字列")へ戻す方法です。 16進数ダンプの参考URLに関しても、NSData型からNSString型の解説がされています。 わかりにくく申し訳ありませんが、引き続きよろしくお願いいたします。
chokojori

2015/04/21 01:04

"e38386 e382b9 e38388 e69687 e5ad97 e58897"をスキャンしてバイト列にすれば、あとは[[NSString alloc] initWithBytes:bytes length:length encoding:NSUTF8StringEncoding];ですから、スキャンしてバイト列にする方法がわからない、ということかな?
at1994

2015/04/21 01:26

迅速なお返事ありがとうございます。 スキャンしてバイト列にするという意味があまり明確に理解できていませんが、おそらく chokojoriさんのおっしゃっていることと思われます。
at1994

2015/04/21 01:29

別のアカウントなのは、本アカウントがパスワード忘れでログインできなくなってしまった際に別アカウントで作成させていただいた為です。ご了承ください。
chokojori

2015/04/21 01:34

C言語のscanf関数を調べてみてください。わからなかったら、具体的なコードを示します。 週末にならないとXcodeが使える環境がないので、そのものズバリのコードは週末まで書けませんが。
doe

2015/04/22 09:16

別の方法で解決しました。 URLエンコード/デコードを使いました。 NSString *string = @"テスト文字列"; string = [string stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; string = [string stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 方法は別方法を使いましたが、自分のやりたいことは解決できたのでひとまず解決とします。ただ質問させていただいた内容については気になるので、継続して調査したいと思います。また、上記質問に対してご教授いただけることがありましたら御解答いただければ幸いです。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問