LoginSignup
23
20

More than 5 years have passed since last update.

NSDataの中身を確認する方法

Last updated at Posted at 2014-03-09

[追記]
コメントで指摘もらいました。
以下の関数の方法は文字列をひとつずつ取り出すにはいいですが、単に中身を確認するだけなら単純にNSString型に変換するメソッドを使ったほうがいいです。

NSString#initWithData:encoding:メソッドを使う

NSLog(@"%@", [[NSString alloc] initWithData:data
                                   encoding:NSUTF8StringEncoding]);

こちらの記事に書いてありました。

「APIを叩いてデータを取得」みたいなケースは普通にありますよね。
ただ、取得したデータ(NSData)をそのまま出力しても人間が分かる形になっていません。
そこで、NSDataの中身を見る関数を、上記記事を使わせてもらって作りました。
以下の関数を定義して、NSDataを渡すとログが出力されます。

void MQDumpNSData(NSData *data)
{
    // データ配列のポインタを得る
    const unsigned char *ptr = [data bytes];
    unsigned long length     = [data length];

    // 取得したデータ分の文字列配列を確保
    unsigned char s[length];

    for (int i = 0; i < length; i++) {
         // ptrポインタから文字列を取り出し、ポインタアドレスを先に進める
        s[i] = *ptr++;
    }

    NSLog(@"%s", s); //=> 人間が分かる形で出力される
}

*ptr++はC言語では常套句?だと思いますが、「配列のアドレスを型のサイズ分先に進める」という処理です。(例だとchar型)
つまり1文字ずつ取り出して配列に格納している、というわけですね。仕組み自体はとてもシンプルです。

23
20
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
20