1. 程式人生 > >[筆試題] 如何判斷主機是大端還是小端(位元組序)

[筆試題] 如何判斷主機是大端還是小端(位元組序)

        今天看《linux程式設計》中關於跨平臺需要注意的事項,看到了大端小端的問題。突然想起實驗室一同學的筆試題,如何判斷主機的大端還是小端。

        所謂大端就是指高位值在記憶體中放低位地址,所謂小端是指低位值在記憶體中放低位地址。比如0x12345678在大端機上是12345678,在小端機上是78564312,而一個主機是大端還是小端要看cpu型別以及執行在上面的作業系統。同一款cpu在不同的作業系統使用的大小端情況是不同的。當然我們通常使用的x86+windows是小端。

        測試大小端一般使用union的特性。union是一個聯合體,所有變數公用一塊記憶體,只是在不同的時候解釋不同。其在記憶體中儲存是按最長的那個變數所需要的位數來開闢記憶體的。

       程式碼如下:     

#include <iostream>
using namespace std;

union 
{
	int number;
	char s;
}test;

bool testBigEndin()
{
	test.number=0x01000002;
    return (test.s==0x01);
}

void main()
{
    if (testBigEndin())	 
		cout<<"big"<<endl;
	else 
		cout<<"small"<<endl;	
}

    其中union的實際記憶體長度是int,即一個字,在32位機上是32位。而char是一個byte,只會取第一個低地址位元組。所以他的值可以用來判斷大小端。

相關推薦

[試題] 如何判斷主機大端還是位元組

        今天看《linux程式設計》中關於跨平臺需要注意的事項,看到了大端小端的問題。突然想起實驗室一同學的筆試題,如何判斷主機的大端還是小端。         所謂大端就是指高位值在記憶體中放低位地址,所謂小端是指低位值在記憶體中放低位地址。比如0x1234567

大小位元組

位元組序     位元組序,又稱端序、尾序,英文單詞為Endian,該單詞來源於於喬納森·斯威夫特的小說《格列佛遊記》,小說中的小人國因為吃雞蛋的問題而內戰,戰爭開始是由於以下的原因:我們大家都認為,吃雞蛋前,原始的方法是打破雞蛋較大的一端。可是當今皇帝的祖父小時候吃雞蛋,一次按古法打雞蛋時碰巧將一個手指弄

大端big endian little endian

讀寫 pue 處理器 bsp 網絡 做的 tdi har power 一、大端和小端的問題 對於整型、長整型等數據類型,Big endian 認為第一個字節是最高位字節(按照從低地址到高地址的順序存放數據的高位字節到低位字節);而 Little endian 則相反,它認為

大端Big endian and Little endian

tro big ttl class erp 順序 通過 網絡 rpc 1.大端和小端的問題 ? 對於整型、長整型等數據類型,Big endian 人為第一個字節是最高位字節(按照從低地址到高地址的順序存放數據的高位字節到低位字節),而 Little endian 則相反,它

位元組Endian大端Big-EndianLittle-Endian

在各種計算機體系結構中,對於位元組、字等的儲存機制有所不同,因而引發了計算機通訊領域中一個很重要的問題,即通訊雙方交流的資訊單元(位元、位元組、字、雙字等等)應該以什麼樣的順序進行傳送。如果不達成一致的規則,通訊雙方將無法進行正確的編/譯碼從而導致通訊失敗。目前在各種體系的計算機中通常採用的位

需要注意位元組大端big endianlittle endian的幾種情景

大端(big endian):在記憶體中,按照從最低有效位元組到最高有效位元組的順序儲存物件,即資料的高位元組,儲存在記憶體的低地址中,而資料的低位元組,儲存在記憶體的高地址中。 小端(littl

位元組——大端Big Endian)和Little Endian

每次碰到這個問題都需要現查資料,腦子不夠用啊,索性就把它的來龍去脈寫下來,加深一下印象。 1. 位元組序問題的存在原因 自計算機採用byte作為儲存單位起,位元組序就是一個有爭議的話題。這是因為我們通常處理的資料都是多位元組資料,比如c語言中一個型別為int的變數,在記憶體

大端 && 網路位元組

(0)背景: 網路上的資料流是位元組流,對於一個多位元組數值,在進行網路傳輸的時候,先傳遞哪個位元組?也就是說,當接收端收到第一個位元組的時候,它是將這個位元組作為高位還是低位來處理呢?  (1)網路位元組序定義: 收到的第一個位元組被當作高位看待,這就要求傳送端傳送的第

判斷系統是大端還是的兩種方法

stream bsp == ace all fun 如果 cnblogs tdi #include <iostream> #include <stdio.h> #include <malloc.h> #include <strin

判斷計算機是大端還是

ima png code imageview ret return 技術 urn 地址 1. 大端:高位存在低地址,低位存在高地址 比如 :0x12345678 2. 小端:高位存在高地址,低位存在低地址 3. 判斷計算機是大端還是小端,代碼如下所示: #include

如果判斷機器是大端還是

() nbsp 多個 brush cpp namespace space big 內存地址 大端:高位字節存放在低位地址,低位字節存放在高位地址 小端:高位字節存放在高位地址,低位字節存放在低位地址 #include<iostream> using names

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

一、概念及詳解 在各種體系的計算機中通常採用的位元組儲存機制主要有兩種: Big-Endian和Little-Endian,即大端模式和小端模式。 Big-Endian和Little-Endian的定義如下: 1) Little-Endian:就是低位位元組排放在記憶體的低地

寫一個C程式判斷系統是32或64位、大端位元組

一、判斷系統是32位或64位32位處理器一次只能處理32位,也就是4個位元組的資料,虛擬地址空間的最大值是4G。64位處理器一次能處理64位,也就是8個位元組的資料,虛擬地址空間的最大值是16T。32位

C語言——判斷儲存型別是大端還是

判斷當前機器的位元組序。 思路:存1,取出第一個位元組的內容:                                                         若為小端,則為 01  00  00  00 …    ;低地址為1              

用程式設計來判斷系統是大端還是

大端是高位位元組先儲存(高地址) 小端是地位位元組先儲存(低地址) 網路位元組序是大端的,也就是高位位元組先傳輸 下面是程式: #include <stdio.h> int main() { union ut{ shor

詳解大端 函式判斷及轉換

本文轉自 http://blog.csdn.net/ce123/article/details/6971544 一、大端模式和小端模式的起源         關於大端小端名詞的由來,有一個有趣的故事,來自於Jonathan Swift的《格利佛遊記》:Lilliput和B

大端判斷及轉換

當前的儲存器,多以byte為訪問的最小單元,當一個邏輯上的地址必須分割為物理上的若干單元時就存在了先放誰後放誰的問題,於是端(endian)的問題應運而生了,對於不同的儲存方法,就有大端(big-endian)和小端(little- endian)兩個描述。 位元組排序按分

筆試面試7 如何判斷一個系統的儲存方式是大端還是

首先看下大小端的概念吧,我老是會有點亂... 來自百度百科的解釋: 大端模式,是指資料的高位儲存在記憶體的低地址中,而資料的低位儲存在記憶體的高地址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:地址由小向大增加,而資料從高位往低位放; 小端模式,是指資料的高位

對於字節順序——大端的理解

image 應該 產生 出錯 混合 nat 轉換 位置 字符串 之前我對大小端的理解是數據存放方式不同,最近在讀《計算機組成-結構化方法》一書時發現,並不是存放方式不同,而是字節地址的編排方式不同,換句話說,存的位置都是一樣的,只不過這個位置因為編址方式的不同使得它的地址編

大端模式 模式

測試 根據 apt har 地址 不同 目前 i++ lock 簡介 大端小端模式指的是不同類型的處理器在數據存儲時的區別。。 大端模式(高尾端模式即末端在高位):將數據的高字節放在低地址中,低字節放在高地址中。 小端模式(低尾端模式即末端在低位):將數據的高字節放在高地