2013-03-14 57 views
0

我尝试写入一个结构到文件中,然后我发现它的endian与内存中的endian不同。为什么文件中写入结构的endian与内存中的struct不同?

一些测试代码:

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 //我知道那是小尾数

[email protected]:~/pro|master⚡ ⇒ hexdump as 
0000000 ccaa ffee aadd 00ff      
0000008 
[email protected]:~/pro|master⚡ ⇒ hexdump as2 
0000000 ccaa ffee aadd 00ff      
0000008 

所以,一个极端是不同的。

+0

使用hexdump -b :) – 2013-03-14 23:05:54

+0

您可以使用'echo 1234 | hexdump'而不是假定endian是错误的。当所有其他都失败时,'man hexdump'。 – paddy 2013-03-14 23:12:33

回答

6

文件的字节顺序与内存没有区别。 hexdump的默认行为是将值打印为16位短路。你所看到的是对记忆的不同解读。尝试使用hexdump -C

相关问题