1

次のコード行を使用してNSStringに変換しようとしているNSDataオブジェクトがあります。

NSString *theData = [[NSString alloc] initWithData:photo encoding:NSASCIIStringEncoding];

残念ながら、希望するバイナリ出力ではなく、次の結果が得られます(ここでバイナリ出力を期待できますか?)。

ÿØÿà

助けていただければ幸いです。
ありがとう。リッキー。

4

3 に答える 3

4

任意のバイナリ データを人間が読める文字列 (一連の 16 進数値など) に変換したい場合は、間違った方法を使用しています。あなたがしているのは、データ自体を ASCII エンコーディングの文字列として解釈することです。

データをファイルまたは標準出力に単純に記録するには、[theData description].

于 2010-03-16T11:47:16.803 に答える
2

「バイナリ出力」の意味が不明です。文字列に「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]];
}
于 2010-03-17T02:28:08.887 に答える
0

initWithData: メソッドを使用してバイナリ データを解析することはできません。コンテンツの 16 進文字列が必要な場合はdescription、NSData のメソッドを使用できます。

于 2010-03-16T11:48:44.510 に答える