次のコード行を使用してNSStringに変換しようとしているNSDataオブジェクトがあります。
NSString *theData = [[NSString alloc] initWithData:photo encoding:NSASCIIStringEncoding];
残念ながら、希望するバイナリ出力ではなく、次の結果が得られます(ここでバイナリ出力を期待できますか?)。
ÿØÿà
助けていただければ幸いです。
ありがとう。リッキー。
任意のバイナリ データを人間が読める文字列 (一連の 16 進数値など) に変換したい場合は、間違った方法を使用しています。あなたがしているのは、データ自体を ASCII エンコーディングの文字列として解釈することです。
データをファイルまたは標準出力に単純に記録するには、[theData description]
.
「バイナリ出力」の意味が不明です。文字列に「01010100011110110」または「0x1337abef」の行に沿ったテキストが含まれていると予想している場合は、NSString の動作について誤解しています。NSStringinitWithData:encoding:
は、データのバイトを、特定のエンコーディングの文字列のバイトであるかのように解釈しようとします。これは NSString の反対です—の結果をdataUsingEncoding:
呼び出して、まったく同じ文字列を返すことができます。initWithData:encoding:
dataUsingEncoding:
たとえば、人間が読める 16 進数の文字列にデータを変換したい場合は、自分で変換を行う必要があります。次のようなことができます。
NSMutableString *binaryString = [NSMutableString stringWithCapacity:[data length]];
unsigned char *bytes = [data bytes];
for (int i = 0; i < [data length]; i++) {
[binaryString appendFormat:@"%02x", bytes[i]];
}
initWithData: メソッドを使用してバイナリ データを解析することはできません。コンテンツの 16 進文字列が必要な場合はdescription
、NSData のメソッドを使用できます。