1. 程式人生 > >大端機和小端機區別

大端機和小端機區別

問題

大端機和小端機的區別。
深入理解計算機系統裡面有如下的描述:

對於跨越多位元組的物件,我們必須建立兩個原則,這個物件的地址是什麼以及儲存器中如何排列這些位元組。對於第一個問題,幾乎在所有的機器上面,多位元組物件都被儲存為連續的位元組序列,因此物件的地址為所使用位元組中最小的地址。對於第二個問題,也稱為位元組序的問題。有兩種儲存方式。

  • 大端模式:數字邏輯高位儲存在記憶體的物理低位
  • 小端模式:數字邏輯低位儲存在記憶體的物理低位

當然,為什麼要有這個東西呢?
深入理解計算機系統給瞭如下的描述:

對於本機的程式設計師來說,他們機器所使用的位元組順序是不可見的。但是,當不同型別的機器之間通過網路傳送二進位制資料的時候會產生問題。因為不同型別的機器可能會使用不同的位元組序,一個常見的問題是當小端機機器產生的資料被髮送到大端機時,接受程式字裡面的字成了反序的。為了避免這個問題,網路應用程式的程式碼編寫必須遵守已經建立的關於位元組序的規則,以確保傳送方機器將他的內部表示轉換為網路標準。接受方把網路標準轉化為接收方的內部表示。

程式碼實現

主要是對於多位元組物件,怎麼能訪問單個位元組的內容。考慮c中的聯合體,使用一個單位元組物件來訪問。

#include <stdio.h>

void check_endian();

int main( void )
{
    check_endian();
    return 0;
}
void check_endian()
{
    union{
        char c; // 訪問第一個位元組
        int data;
    }un;
    un.data = 0x01020304;
    if(un.c == 0x01 )
    {
        printf
( "Big endian!\n" ); } else if( un.c == 0x04 ) { printf( "Little endian!\n" ); } else { printf("No idea!\n"); } }

下面的程式碼展示了主機位元組序和網路位元組序的區別。intel系列的cpu前者一般都是小端,後者是大端。

#include <stdio.h>
#include <arpa/inet.h>

int main( void ){

    unsigned short
host_port = 0x1234; unsigned long host_ip = 0x12345678; unsigned short net_port = htons( host_port ); unsigned long net_ip = htonl( host_ip ); printf( "Host port : %#x\n", host_port ); printf( "Host ip : %#lx\n", host_ip ); printf( "Net port : %#x\n", net_port ); printf( "Net ip : %#lx\n", net_ip ); return 0; } /* Host port : 0x1234 Host ip : 0x12345678 Net port : 0x3412 // 大端:邏輯高位存物理低位 Net ip : 0x78563412 */

相關推薦

大端區別

問題 大端機和小端機的區別。 深入理解計算機系統裡面有如下的描述: 對於跨越多位元組的物件,我們必須建立兩個原則,這個物件的地址是什麼以及儲存器中如何排列這些位元組。對於第一個問題,幾乎在所有的機器上面,多位元組物件都被儲存為連續的位元組序列,因此物

大端的判斷方法

int checkCPU() {  {   union w   {      int  a;    char b;   } c;   c.a = 1;   return (c.b == 1);  } } 剖析: 嵌入式系統開發者應該對Little-endian和Big-endian模式非

通過一句話記住大端序的區別

在軟體開發過程中,軟體開發人員都知道大端序和小端序的概念,但是在真正使用的時候,傻傻分不清兩種到底是怎麼儲存。 首先還是先看下基本概念: 1、大端模式:高位元組儲存在記憶體的低地址 2、小端模式:高位元組儲存在記憶體的高地址 舉例: var = 0x11223344,對於這個變數

網路位元組序,大端

一、在進行網路通訊時是否需要進行位元組序轉換? 相同位元組序的平臺在進行網路通訊時可以不進行位元組序轉換,但是跨平臺進行網路資料通訊時必須進行位元組序轉換。 原因如下:網路協議

大端格式格式儲存的區別

short int x;char x0,x1;x=0x1122;x0=((char*)&x)[0]; //低地址單元x1=((char*)&x)[1]; //高地址單元若x0=0x11,則是大端; 若x0=0x22,則是小端。-----------有時候,用C語言寫程式時需要知道是大端模式還是

大端模式模式的區別

端模式,英文j :Endian.該名詞不只是存在於嵌入式之中.在計算機業界,簡單概要的說Endian表示資料在儲存器中的存放順序。下文舉例說明在計算機中大小端模式的區別。  如果將一個32位的整數0x12345678存放到一個整型變數(int)中,這個整型變數採用大端或者小端模式在記憶體中的儲存由下表所示。

大端位元組區別

大端:高位元組存放在低地址,低位元組存放在高地址 小端:高位元組存放在高地址,低位元組存在低 不過給我啟發的是,在裘宗燕翻譯的《程式設計實踐》裡,這對術語並沒有翻譯為“大端”和小端,而是“高尾端”和“低尾端”,這就好理解了:如果把一個數看成一個字串,比如11223344看成

大端區別

一、大小端名稱起源        Endian這個詞來源於Jonathan Swift在1726年寫的諷刺小說"Gulliver's Travels"(《格利佛遊記》)。該小說在描述Gulliver暢遊小人國時碰到了如下的一個場景。有一次因為對水煮蛋該從大的一端(Big-

使用C語言判斷一個機器是大端還是

1.什麼是大端,什麼是小端? 大端:資料的高位位元組存放在高地址內,資料的低位位元組存放在低地址內。 小端:資料的高位位元組存放在低地址內,資料的高位位元組存放在高地址內。 一個整型是4個位元組,如:0x1a2b3c4d。電腦讀取記憶體資料時,是從低位地址到高位地址進行

大端模式模式

說明 dia style 得出 nio 特性 所有 訪問 img 1. 為什麽會產生兩種模式: 在計算機中我們是以字節為單位的,每一個地址單元都對應著一個字節,一個字節就是8位,c語言中char類型之外,還 有四個字節的int,個字節的longlong類型,並

位元組序----大端

大端序 (big endian ):最高有效位元組儲存在最低低至,隨地址升高,位元組的權重降低。 小端序(little endian): 最低有效位元組儲存在最低地址,隨地址升高,位元組的權重升高。 比如說一個int型數字a為0x1234,那麼0x12代表a的高位,0x34代表a

[C/C++]_[初級]_[大端序理解]

場景 在進行Socket通訊時, 因為網路位元組序是 Big-Endian模式(標準), 而大部分Windows系統都是 Little Endian模式, 所以在傳輸數值型別的資料時, 需要把 Little Endian的記憶體資料轉換為 Big-Endian再發送.

詳解大端模式模式

一、大端模式和小端模式的起源      關於大端小端名詞的由來,有一個有趣的故事,來自於Jonathan Swift的《格利佛遊記》:Lilliput和Blefuscu這兩個強國在過去的36個月中一直在苦戰。戰爭的原因:大家都知道,吃雞蛋的時候,原始的方法是打破雞蛋較大

大端系統系統

大端/小端就是Big-Endian/Little-Endian問題 大端:高位位元組存在高地址上,低位位元組存在低地址上 小端:低位位元組存在高地址上,高位位元組存在低地址上  有兩種常見的方法來判斷是大端還是小端 方法一:使用指標 in

大端模式模式的判斷及其互相轉化

一.定義 大端模式(Big Endian):資料的高位元組,儲存在記憶體的低地址中;資料的低位元組,儲存在記憶體的高地址中。 小端模式(Little Endian):資料的高位元組,儲存在記憶體的高地址中;資料的低位元組,儲存在記憶體的低地址中。 二.

大端儲存儲存,網路位元組序

一、大端、小端 "大端"和"小端"表示多位元組值的哪一端儲存在該值的起始地址處;小端儲存在起始地址處,即是小端位元組序;大端儲存在起始地址處,即是大端位元組序; 或者說: 1.小端法(Little-Endian)就是低位位元組排放在記憶體的低地址端(即該值的起始地址),高

大端模式模式的再理解

首先看一段程式: #include <stdio.h> int main() { int a = 100; int b = 200; int c = 300; printf("%p\n",&a);

大端儲存儲存及基於c語言的測試函式

大端模式是什麼?小端模式又是什麼?對系統哪些方面有影響?又如何來檢視我的電腦到底是大端還是小端呢?這些問題在文中都將獲得解決,一起來看看吧。首先我們來介紹一下概念:大端模式(Big_endian):字資料的高位元組儲存在低地址中,而字資料的低位元組儲存在高地址中。如下圖。小端

詳解Big-EndianLittle-Endian,大端模式模式

詳解大端模式和小端模式 一、大端模式和小端模式的起源         關於大端小端名詞的由來,有一個有趣的故事,來自於Jonathan Swift的《格利佛遊記》:Lilliput和Blefuscu這兩個強國在過去的36個月中一直在苦戰。戰爭的原因:大家都知道,吃雞蛋

大端模式模式的起源

        關於大端小端名詞的由來,有一個有趣的故事,來自於Jonathan Swift的《格利佛遊記》:Lilliput和Blefuscu這兩個強國在過去的36個月中一直在苦戰。戰爭的原因:大家都知道,吃雞蛋的時候,原始的方法是打破雞蛋較大的一端,可以那時的皇帝的祖父由於小時侯吃雞蛋,按這種方法把手指弄