溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

大端字節(jié)序和小端字節(jié)序有什么區(qū)別

發(fā)布時(shí)間:2021-10-12 15:46:59 來(lái)源:億速云 閱讀:463 作者:iii 欄目:編程語(yǔ)言

本篇內(nèi)容主要講解“大端字節(jié)序和小端字節(jié)序有什么區(qū)別”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“大端字節(jié)序和小端字節(jié)序有什么區(qū)別”吧!

字節(jié)序

首先,字節(jié)序由CPU的架構(gòu)決定,與操作系統(tǒng)無(wú)關(guān),與編譯器亦無(wú)關(guān)。

所謂字節(jié)序,就是字節(jié)在內(nèi)存中的排列順序。

字節(jié)序分為以下兩種:

大端字節(jié)序:高位字節(jié)在前,低位字節(jié)在后,與人類(lèi)讀寫(xiě)數(shù)值的方法相同。
小端字節(jié)序:低位字節(jié)在前,高位字節(jié)在后。

字節(jié)序?yàn)槭裁磿?huì)有大端和小端之分

數(shù)據(jù)在內(nèi)存中一般都是以字節(jié)為單位存儲(chǔ)的,但是有些數(shù)據(jù)類(lèi)型大于1個(gè)字節(jié),譬如short占用2個(gè)字節(jié),int占用4個(gè)字節(jié),同時(shí)處理器的總線(xiàn)寬度一般是32位后者64位,即一次讀寫(xiě)操作,可以同時(shí)讀寫(xiě)4個(gè)字節(jié)或者64字節(jié)的數(shù)據(jù)。

這些超過(guò)1個(gè)字節(jié)的數(shù)據(jù),就存在字節(jié)在內(nèi)存中如何排序的問(wèn)題,根據(jù)排序方式的不同,就產(chǎn)生了大端模式和小端模式之分。

如何區(qū)分大端和小端

內(nèi)存中地址一般都是從低到高來(lái)訪(fǎng)問(wèn)的(棧內(nèi)存相反),如下圖: 

大端字節(jié)序和小端字節(jié)序有什么區(qū)別 

假設(shè)有一個(gè)十六進(jìn)制數(shù):0x1234,使用兩個(gè)字節(jié)來(lái)存儲(chǔ),則0x12是高位字節(jié)(高數(shù)據(jù)位),0x34是低位字節(jié)(低數(shù)據(jù)位)。

如果低位字節(jié)0x34存儲(chǔ)在內(nèi)存的高地址,即為大端字節(jié)序。即計(jì)算機(jī)先存儲(chǔ)0x12,再存儲(chǔ)0x34,內(nèi)存中排列為0x1234。符合人類(lèi)的閱讀習(xí)慣。

如果低位字節(jié)0x34存儲(chǔ)在內(nèi)存的低地址,即為小端字節(jié)序。即計(jì)算機(jī)先存儲(chǔ)0x34,再存儲(chǔ)0x12,內(nèi)存中排列為0x3412。

同理,0x1234567的大端字節(jié)序和小端字節(jié)序的寫(xiě)法如下圖:

大端字節(jié)序和小端字節(jié)序有什么區(qū)別

如何通過(guò)編程來(lái)判斷當(dāng)前字節(jié)序

原理:就是讀取某個(gè)short變量或者其他類(lèi)型變臉的第一個(gè)字節(jié)的數(shù)據(jù),第一個(gè)字節(jié)(低地址,也是起始地址)的數(shù)據(jù)存儲(chǔ)的是高位字節(jié)數(shù)據(jù)則為大端,反之,如果第一個(gè)字節(jié)的數(shù)據(jù)存儲(chǔ)的低位自己的數(shù)據(jù)則為小端。

代碼如下,編譯運(yùn)行后即可判斷當(dāng)前字節(jié)序。

#include <stdio.h>

int main()
{
	short byteOrder = 0x1234;
	char cOrder = (char)&byteOrder; // short存儲(chǔ)在內(nèi)存中的地一個(gè)字節(jié)(低地址)的值,賦值給char
	if (cOrder == 0x12)
	{
		printf("Big-Endian\n");
	}
	else
	{
		printf("Little-Endian\n");
	}
	return 0;
}

字節(jié)序與CPU架構(gòu)

大端模式的cpu:PowerPC(默認(rèn)大端),IBM,SUN。

小端模式的cpu:x86,DEC。

arm既可以工作在大端模式,也可以工作在小端模式。

cpu架構(gòu)的分類(lèi)

目前市面上的CPU指令集分類(lèi)主要分有兩大陣營(yíng),

一個(gè)是intel、AMD為首的復(fù)雜指令集CPU,

另一個(gè)是以IBM、ARM為首的精簡(jiǎn)指令集CPU。

兩個(gè)不同品牌的CPU,其產(chǎn)品的架構(gòu)也不相同。

例如,Intel、AMD的CPU是X86架構(gòu)的,而IBM公司的CPU是PowerPC架構(gòu),ARM公司是ARM架構(gòu)。

x86架構(gòu)的CPU是小端字節(jié)序,PowerPC架構(gòu)的CPU是大端(默認(rèn)大端),ARM架構(gòu)的CPU是小端(默認(rèn)小端)。

網(wǎng)絡(luò)字節(jié)序

網(wǎng)絡(luò)字節(jié)序,統(tǒng)一使用大端字節(jié)序。

到此,相信大家對(duì)“大端字節(jié)序和小端字節(jié)序有什么區(qū)別”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI