C++測試電腦的資料存放區模式

來源:互聯網
上載者:User

相信大家都知道大端儲存和小端儲存的概念,這在平時,我們一般不用考慮,但是,在某些場合,這些概 念就顯得很重要,比如,在 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;      }  }

在我的電腦上啟動並執行截圖如下:

由此可見,我的電腦是“小端 儲存”模式,所以,用這種方法,可以擷取電腦的資料存放區模式。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.