0

ストリームの途中にゼロ (' 0 ')を含む圧縮されたストリーム オブジェクトを含むPDFのコンテンツをNSLogしたいと考えています。

残念ながら、最初のストリーム オブジェクトで ' 0 ' が最初に出現すると、コンソールの出力が終了します...

SOまたはクラウドで何も見つかりませんでした。
4つの異なる方法で試してみました...

    NSString *pdfFilePath = [[NSBundle mainBundle] pathForResource: @"myPDF" ofType: @"pdf"];
    NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:pdfFilePath];
    NSData *myData = [NSData dataWithContentsOfURL:fileURL];

    ________________________________________________________________________
    //1
    NSString *string = [[NSString alloc] initWithData:myData
                                             encoding:NSASCIIStringEncoding];
    NSLog(@"%@", string);
    ________________________________________________________________________
    //2   
    NSString *myDataAsString = [[NSString alloc] initWithData:myData
                                                     encoding:NSASCIIStringEncoding];
    NSLog(@"%@", myDataAsString);
    ________________________________________________________________________
    //3
    NSString *myPDFasString = [NSString stringWithContentsOfURL:fileURL
                                                       encoding:NSASCIIStringEncoding error:NULL];
    NSLog(@"%@", myPDFasString);
    ________________________________________________________________________ 
    //4       
    NSString *stringFromFileAtURL = [[NSString alloc] initWithContentsOfURL:fileURL
                                                                   encoding:NSASCIIStringEncoding error:NULL];
    NSLog(@"%@", stringFromFileAtURL);        

それらの 4 つすべてのコンソールでの出力: (もちろん、バッキング ストアでは常に null で終了する文字列です)

    %PDF-1.1  
    %
    1 0 obj <<  
      /Type /Catalog  
      /Count 1  
      /Pages 6 0 R >>  
    endobj

    2 0 obj <<  
    %%/Type /Stream  
      /Filter /FlateDecode  
      /Length 12 >>  

    stream
    x+TT

ここでは、「x + TT」の後の「0」(ストリームオブジェクトの始まり)のためにストリームが終了します...

誰?

4

1 に答える 1

0

NSLogC スタイルの文字列をフォーマットすると、C 文字列を出力する他のものと同様に、null で停止します。

簡単なコードで問題に取り組む方法は複数ありますが、これはデバッグ専用であるため、凝る必要はありません。ここにいくつかのポインタがあります:

  • NSDataバイトへのポインターを与えることができますbytes、およびその数はlengthです。
  • 標準 C ライブラリ関数isprintは、文字が印刷可能かどうかを教えてくれます。
  • 標準 C ライブラリ関数putcharは、1 文字をコンソールに出力します。
  • 印刷できないものの表現を作成したい場合は、printf役に立つかもしれません。

行き詰まった場合は、作成したコードを含めて別の質問をしてください。

HTH

于 2015-07-21T19:42:26.573 に答える