程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C語言--測試電腦存儲模式(大端存儲OR小端存儲)

C語言--測試電腦存儲模式(大端存儲OR小端存儲)

編輯:C++入門知識

相信大家都知道大端存儲和小端存儲的概念,這在平時,我們一般不用考慮,但是,在某些場合,這些概念就顯得很重要,比如,在 Socket 通信時,我們的電腦是小端存儲模式,可是傳送數據或者消息給對方電腦時,恰巧,對方的電腦是大端存儲,那麼,如果你直接的傳輸,那麼對方解析的肯定就是亂碼了,所以,我們需要在傳輸數據之前轉換成網絡順序。

     這篇文章的目的不是解決上述的處理字節順序的問題,而是,用C語言實現測試電腦的字節存儲順序。

     在C語言中有一種結構--Union,被稱為“共用體”,它可以像struct一樣存儲不同類型的數據,但是它在內存中所占的大小是最大的數據類型所占的字節數(這裡不考慮字節對齊的問題)。由此,我們可以利用這個數據類型判斷了。

     具體方法如下:

     假如,現在我們存儲一個整型的變量,由於這個整型的變量占4個字節,所以,它在計算機中的存儲應該是這個樣子:

                   (0x)0001        低地址--->高地址   大端存儲

                   (0x)0001        高地址<---低地址   小端存儲

所以,我們可以取得低地址的數據,測試是1或者是0,如果是1,那麼就是小端存儲,如果是0,那麼就是大端存儲。

     下面,給出測試代碼:


 

#include <iostream>  
using namespace std; 
 
void checkSystemBigOrLittle(void); 
 
int main(void) 
{ 
    checkSystemBigOrLittle(); 
 
    system("pause"); 
    return 0; 
} 
 
void checkSystemBigOrLittle(void) 
{ 
    typedef union MyUnion 
    { 
        int i; 
        char c; 
    }; 
 
    MyUnion mu; 
 
    mu.i = 1; 
 
    if(mu.c == 1) 
    { 
        cout<<"你的電腦是小端存儲模式。。。"<<endl; 
    } 
    else if (mu.c == 0) 
    { 
        cout<<"你的電腦是大端存儲模式。。。"<<endl; 
    } 
    else 
    { 
        cout<<"很抱歉,出錯了。。。"<<endl; 
    } 
} 

#include <iostream>
using namespace std;

void checkSystemBigOrLittle(void);

int main(void)
{
 checkSystemBigOrLittle();

 system("pause");
 return 0;
}

void checkSystemBigOrLittle(void)
{
 typedef union MyUnion
 {
  int i;
  char c;
 };

 MyUnion mu;

 mu.i = 1;

 if(mu.c == 1)
 {
  cout<<"你的電腦是小端存儲模式。。。"<<endl;
 }
 else if (mu.c == 0)
 {
  cout<<"你的電腦是大端存儲模式。。。"<<endl;
 }
 else
 {
  cout<<"很抱歉,出錯了。。。"<<endl;
 }
}

 

在我的電腦上運行的截圖如下:

 

\

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