0

バイナリファイルに数値を書き込むプログラムを作成しました。スニペットは次のとおりです。

    u_int16_t N=150;
    u_int16_t seed=3;

    FILE * outfile, *infile;

    outfile=fopen("tempfile","wb");
    //write these 2 16-bit numbers into binary file
    fwrite(&seed, 2, 1, outfile);
    fwrite(&N, 2, 1, outfile);

    infile=fopen("tempfile","rb");
    if(infile==NULL) fputs("Fire error\n",stderr);
    //get the size of the file
    fseek(infile,0,SEEK_END);
    int lsize=ftell(infile);
    rewind(infile);

    u_char * temp2=(u_char*)malloc(lsize);
    if(temp2==NULL) printf("temp2 error allocation\n");
    fread(temp2,1,lsize,infile);
    for(i=0;i<lsize;i++)
    printf("%x",temp2[i]);
    printf("\n");
    fclose(infile);
    free(temp2);

結果は次のとおりです。

30960

したがって、3は30リトルエンディアンとして印刷され、150はとして印刷され960、追加0の、実際に0x96=150は、ビッグエンディアンです。

3エンディアンがとで異なるのは150なぜですか。また、追加のエンディアンがあるのはなぜ0ですか。ありがとう!

4

1 に答える 1

4

あなたがするとき

printf("%x",temp2[i]);

16進数に先行ゼロがあるバイトは、そのゼロなしで出力されます。これは、たとえば、などの数値がとして出力されることを意味し0x03ます3

これは、ファイルに4バイトを書き込むことで非常に明白ですが、印刷出力には5桁の16進数しかありません(ヒント:4バイトは8桁の16進数です)。

代わりに例えば

printf("%02x",temp2[i]);
于 2013-03-26T10:05:41.607 に答える