編寫函數判斷當前的機器大端小端

例如:ide

數字1在內存中存儲的方式分爲兩種:
[00 00 00 01] 大端字節序
[01 00 00 00] 小端字節序
spa


1、使用指針判斷:
#include<stdio.h>
int check_sys()
{
 int n = 1;
 if (1 == *(char *)&n)
 {
  return 1;
 }
 else
 {
  return 0;
 }
}
int main()
{
 int a[4] = { 1, 2, 3, 4 };
 int *ptr1 = (int *)(&a + 1);
 int *ptr2 = (int *)((int)a + 1);
 printf("%x,%x ", ptr1[-1], *ptr2);
 int ret = check_sys();
 if (ret == 1)
 {
  printf("little\n");
 }
 else
 {
  printf("big\n");
 }
 system("pause");
 return 0;
}
指針


2、使用union(聯合)判斷
聯合這個關鍵字,定義類型的特色是:
經過類型建立的變量,全部的變量共用一塊空間,全部的變量起始的地址都是相同的。若是用UN建立un,在內存開闢空間的時候爲un開闢了一塊空間,該空間的大小必須是全部成員中最大的成員所佔的空間。在聯合的成員中,同一段時間只能使用一個成員,以避免發生衝突。
#include<stdio.h>
int check_sys()
{
 union UN
 {
  char c;//1
  int i;//4
 }un;
 un.i = 1;
 if (un.c == 1)
 {
  return 1;
 }
 else
 {
  return 0;
 }
}
int main()
{
 int a[4] = { 1, 2, 3, 4 };
 int *ptr1 = (int *)(&a + 1);
 int *ptr2 = (int *)((int)a + 1);
 printf("%x,%x ", ptr1[-1], *ptr2);
 int ret = check_sys();
  if (ret == 1)
  {
   printf("little\n");
  }
  else
  {
   printf("big\n");
  }
 system("pause");
 return 0;
}
內存

相關文章
相關標籤/搜索