2

クラスに流れるNSDataを変化させました。これらの一部は、rtf形式の文字列である可能性があります。今、私は(うまくいけば正しく)すべてのrtf形式の文字列がで始まることを発見しました

data: <7b5c7274 66315c61 and then random other data ....>

ここで、任意のNSDataの最初の8バイトが(7b5c7274 66315c61)に等しいかどうかを確認するためのテストを行う必要があります。ですから、質問は2つあると思います。

  1. テスト目的で(7b5c7274 66315c61)値を保存するにはどうすればよいですか

  2. 特定のNSDataに対してテストするにはどうすればよいですか

ありがとう!

4

2 に答える 2

3

を呼び出しgetBytes:length:、8 バイトのバッファを渡し、返された結果をテストできます。

rtf ファイルをNSDataに入れ、最初の 8 バイトを取得して出力し、これらの 8 つの定数をプログラムのバイト配列に入れます。次に、その配列を がgetBytes:length:返す8 バイトと比較しますmemcmp

于 2012-06-09T04:55:20.530 に答える
2

RTF はテキストベースのファイル形式です。これらの値はNSData"{\rtf1\a" に対応します。ここで、"\a" は "\ansi" の先頭です。個人的には、最初の 5 バイトが "{\rtf" に一致することをテストします。これは、fileコマンドの「マジック」ファイルがテストとして使用するものです。を参照してください/usr/share/file/magic/rtf

NSString* theString = [[NSString alloc] initWithBytes:[theData bytes] length:MIN([theData length], 5) encoding:NSASCIIStringEncoding]一致テキストは純粋な ASCII であるため、 andを使用できます[theString isEqualToString:@"{\\rtf"]。データが ASCII でない場合、デコードは失敗し、等値テストは false になります (メッセージングが 0 を返すためtheString) 。これが目的です。nilnil

于 2012-06-09T05:18:33.413 に答える