[追記]
コメントで指摘もらいました。
以下の関数の方法は文字列をひとつずつ取り出すにはいいですが、単に中身を確認するだけなら単純に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文字ずつ取り出して配列に格納している、というわけですね。仕組み自体はとてもシンプルです。