1. 程式人生 > >判斷一個機器使用的是大端儲存還是小端儲存

判斷一個機器使用的是大端儲存還是小端儲存

本文節選自《UNIX網路程式設計》。

考慮一個16位整數,它由兩個位元組組成。記憶體中儲存這兩個位元組有兩種方法:一種是將低序位元組儲存在起始地址,這稱為小端(little-endian)位元組序;另一種方法是將高序位元組儲存在起始地址,這稱為大端(big-endian)位元組序。

下面的程式可以判斷一臺機器是大端儲存還是小端儲存。

#include<stdio.h>

int main(int argc, char** argv){

	//聯合(union)中,所有成員引用的是記憶體中相同位置,
	//由具體成員型別決定了這些位如何被解釋
	union{
		short s;
		char c[sizeof(short)];
	} un;

	un.s = 0x0102; //16進位制數中,02是低序位元組,01是高序位元組

	if(sizeof(short)==2){
		if(un.c[0]==1 && un.c[1]==2){
			printf("big-endian\n");
		}else if(un.c[0]==2 && un.c[1]==1){
			printf("little-endian\n");
		}else{
			printf("unknow\n");
		}
	}else{
		printf("sizeof(short) = %d\n",sizeof(short));
	}

	return 0;
}


相關推薦

判斷一個機器使用的是大端儲存還是儲存

本文節選自《UNIX網路程式設計》。 考慮一個16位整數,它由兩個位元組組成。記憶體中儲存這兩個位元組有兩種方法:一種是將低序位元組儲存在起始地址,這稱為小端(little-endian)位元組序;另一種方法是將高序位元組儲存在起始地址,這稱為大端(big-endian)位

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

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

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

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

【已解決】如何判斷處理器是大端,或

去年11月份的面試題,今天有空整理出來了,算是總結。 ************************************************************ 大端、小端指對運算元的存放,大端從高到低放,小端從低到高放。X86的intel平臺為小端,微控制器

怎麼編寫簡單程式判斷電腦是大端cpu還是cpu

電腦的cpu有兩種,大端和小端cpu。 大端cpu: 所謂的大端,是指資料的高位元組,儲存在記憶體的低地址中,而資料的低位元組,儲存在記憶體的高地址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:地址由小向大增加,而資料從高位往低位放; 小端: 所謂的小端,是指資料的

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

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

如何判斷機器CPU是大端模式還是模式

說明:這裡面涉及到本機位元組序和網路位元組序的概念。A (本機位元組序) ---- 網路位元組序 ----B(本機位元組序),其中本機位元組序就是指機器是大端還是小端,網路位元組序,我們都知道網路中會將內容封裝成流,比如TCP/IP或者是 ISO,網路位元組序是大端模式。引用網上的一張關於大小端的圖

C語言判斷資料儲存大端模式還是模式

用C語言寫程式時需要知道是大端模式還是小端模式。所謂的大端模式,是指資料的低位儲存在記憶體的高地址中,而資料的高位,儲存在記憶體的低地址中;所謂的小端模式,是指資料的低位儲存在記憶體的低地址中,而資料的高位儲存在記憶體的高地址中。為什麼會有大小端模式之分呢?這是因為在計算機系

判斷當前環境是大端法還是法的兩種方法

1:寫一個聯合體判斷 ///一個32位四位元組的整數值,例如:1,實際的計算機編碼表示是0x000000001 ///小端系統中在記憶體中的表示是 01 00 00 00 ///大端系統中在記憶體中的表示是 00 00 00 01 union EndianTest{ int8

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

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

c語言 之大端儲存問題

我們都知道資料在計算機中的儲存是以補碼形式儲存的。在計算機中,如果資料的高位元組內容放在高地址處,低位元組內容放在低地址處,我們稱它為小端位元組序;相反,如果資料的高位元組內容放在底地址處,低位元組內

大端儲存格式與儲存格式

1.大端儲存格式即字資料的高位元組儲存在低地址中,而字資料的低位元組則存放在高地址中。與大端儲存格式相反,在小端儲存格式中,低地址中存放的是字資料的低位元組,高地址存放的是字資料的高位元組。 例如,3

大端格式和格式儲存的區別

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

判斷大端模式還是模式

#include <stdio.h>int main (int argc, char **argv){    int a = 0x12345678;    char b;    b = (((unsigned char *)&(a))[0]);    i

大端機和機的判斷方法

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

大端模式和模式

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

大端模式與模式

abcde 輸出 stdlib.h rto bcd lib 字符 小端 const Big-Endian和Little-Endian的定義如下: 1) Little-Endian就是低位字節排放在內存的低地址端,高位字節排放在內存的高地址端。 2) Big-Endi

大端模式、模式和C#反轉

iou name 通過 緩存 .net new mark 要求 boa A、C#大端模式和小端模式。 小端(little-endian)模式:低地址上存放低字節,高地址上存放高字節。 如0x11223344→ byte[] numBytes = new byte[]{ 0x

大端BigEndian、LittleEndian與字符集編碼

title 不同的 box clear switch 最小數 name 文件頭部 存儲 BigEndian(大端):低字節在高內存地址 LittleEndian(小端):低字節在低內存地址 也就是看低字節在高內存地址還是低內存地址,也就是看低字節在前還是高字節在

位元組序----大端序和

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