程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 大端小端,大端

大端小端,大端

編輯:關於C語言

大端小端,大端


大端格式:在這種格式中,字數據的高字節存儲在低地址中,而字數據的低字節則存放在高地址中, 小端格式:與大端存儲格式相反,在小端存儲格式中,低地址中存放的是字數據的低字節,高地址存放的是字數據的高字節

這裡寫圖片描述 
接下來,如果別人給你出一道題,讓你編寫一個簡單的程序就能測試出當前系統是大端存儲還是小端存儲,我們該怎麼解決呢。

在這裡我們可以考慮用兩種方法,一種是利用指針,還有一種巧妙的方法是利用union聯合體;

 首先我們要知道union的幾點特性:

1、union中可以定義多個成員,union的大小由最大的成員的大小決定。 
2、union成員共享同一塊大小的內存,一次只能使用其中的一個成員。 
3、對某一個成員賦值,會覆蓋其他成員的值 
來看一個簡單的代碼:

    union  UN
    {
       char c;
       int i;
    }un;

  

  其實此時系統為我們分配了一塊int型大小的空間,對我們定義的字符c和整形i進行存儲,的存儲方式如下

這裡寫圖片描述 
可以看到c和i是公用一塊空間,所以在同一時刻我們並不能取到union中的幾個內容,而是只能保證在某一時間使用一個變量成員。


下面為測試當前系統是大端還是小端存儲的兩個小程序:

 
方法一:  利用指針的特性

#include<stdio.h> #include<windows.h> int check_sys() { int a = 1; char *p = (char *)&a; if (*p == 1) return 0; else return 1; } int main() { int ret = 0; ret = check_sys(); if (ret == 0) printf("little"); else printf("big"); system("pause"); return 0; } 方法二:利用共用體union int check_sys() { union UN { char c; int i; }un; un.i = 1; if (un.c == 1) return 0; else return 1; } int main() { int ret = 0; ret = check_sys(); if (ret == 0) printf("little"); else printf("big"); system("pause"); return 0; }

  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved