1

C バイト配列 (ASCII ではない) の内容をコンソールに出力する必要が生じた場合、'printf' には、配列をステップスルーするときに、使用するたびに戻り値を置かないという利点があります。したがって、配列は画面全体に簡潔に印刷されます。ただし、印刷物が実際に画面に表示されるまでには時間がかかることが多く、必死になって「ターミナル」を開いたり閉じたりすることがあります。

一方、「NSLog」はすばやく出力されますが、ここや他の場所で、配列の各ステップで適用する必要があることがよくあります。残念なことに、これは使用のたびに return を挿入するため、短い配列でもページを覆い、読み取りやコピーが困難になります。

記録のために、「NSMutableString」と「appendFormat」を使用して、ページ全体に印刷する簡単な解決策があることを指摘する価値があると思いました。これは、コンマ、スペース、および括弧で囲まれた「ベルとホイッスル」バージョンで、テスト目的で便利に使用できます。これは C 関数として構築され、10 進数 (%d) で出力されます。他の形式については、 https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/introStrings.htmlにあるApple の「String Programming Guide」を参照してください。

void byteArrayLog(unsigned char *bArray, int numBytes)
{
    int i;  
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSMutableString* dString = [NSMutableString stringWithCapacity:5*numBytes];//Create a mutable string. Note the length.
    [dString appendString:@"{"];//Start with "{".
    for(i = 0; i < numBytes-1; i++)
        [dString appendFormat:@"%d, ", bArray[i]];//Format a byte, follow with a comma and a space.
    [dString appendFormat:@"%d}", bArray[i]];//Format the final byte, finish with a "}".

    NSLog(@"Array contents = %@", dString);//Print to the console.

    [pool drain];//Clean up.
}
4

1 に答える 1

1

NSLog()は標準エラー ストリーム ( stderr) にprintf()出力しますが、標準出力 ( stdout) に出力します。標準出力は正しくフラッシュされていないようですが、標準エラーストリームは - 使用してみてください

fprintf(stderr, "format string: %d", array[index]);

-style 関数をstderr使用して印刷するため。printf()

于 2012-11-16T18:25:53.573 に答える