0

構造体をファイルに書き込もうとすると、そのエンディアンがメモリ内のエンディアンと異なることがわかりました。

いくつかのテストコード:

void show_hex(unsigned char *p, int n)
{

    for (int i=0; i<n;i++){
        printf("%02X ",p[i]);
    }

}

int main()
{
    FILE *fp = fopen("as","w");
    struct X{
        int x,y;
    };
    struct X *p = malloc( sizeof(struct X));
    p->x = 0xFFEECCAA;
    p->y = 0xFFAADD;
    show_hex((unsigned char *) p, sizeof(struct X));
    fwrite(p, sizeof(struct X), 1, fp);
    fclose(fp);

    int f = open("as2",O_WRONLY);
    write(f, p, sizeof(struct X));
    close(f);
    return 0;
}

問題の出力: AA CC EE FF DD AA FF 00 //私はそれがリトルエンディアンであることを知っています

tyw@um08:~/pro|master⚡ ⇒  hexdump as
0000000 ccaa ffee aadd 00ff                    
0000008
tyw@um08:~/pro|master⚡ ⇒  hexdump as2
0000000 ccaa ffee aadd 00ff                    
0000008

だからエンディングが違う。

4

1 に答える 1

6

ファイルのエンディアンはメモリと同じです。のデフォルトの動作はhexdump、値を 16 ビットの short として出力することです。あなたが見ているのは、記憶の異なる解釈です。試すhexdump -C

于 2013-03-14T23:06:00.127 に答える