//little endian: the least significant byte at lowest address.
//big-endian: the most significant byte at lowest address.
int checkSystem()
{
//union size is the largest size of its fields. And all fields are stored right from lowest address.
union check{
int i;
char ch; //stored at the lowest byte.
}c;
c.i = 1;
return (c.ch == 1);
}
int main()
{
/*
* value: 12345678 //output digits from highest byte to lowest byte
* p[0]: 78 //'78' is the least significant byte. p[0] locates at the lowest address.
* p[1]: 56
* p[2]: 34
* p[3]: 12 //'12' is the most significant byte. p[3] locates at the highest address.
* ptr1[-1]: 4
* *ptr2: 2000000 //output digits from highest byte to lowest byte, so '02' comes first. when big-endian, *ptr2: 0x100
*/
printf("%s\n", checkSystem()?"Little-Endian":"Big-Endian");
int i;
int value = 0x12345678;
printf("value: %x\n", value);
char *p = (char*)&value;
for(i=0; i<4;i++)
{
printf("p[%d]: %x\n", i, p[i]);
}
int a[4] = {1,2,3,4};//1: 0x00000001, 2: 0x00000002, 3: 0x00000002, 4: 0x00000004.
int *ptr1 = (int*)(&a+1); //ptr1 points to the ending address of array a: the integer right after array a.
int *ptr2 = (int*)((int)a+1); //ptr2 points to starting (low) address of the second byte of a[0]
printf("ptr1[-1]: %x\n*ptr2: %x\n", ptr1[-1], *ptr2);
return 0;
}
C语言之大小端模式
最新推荐文章于 2023-06-20 09:32:25 发布