學(xué)習(xí)底層編程或逆向的童鞋,肯定對(duì)這兩個(gè)名詞并不陌生吧?!今天就給大家介紹一下這兩個(gè)概念.
科普:
大端和小端,老外叫 Big-Endian 和 Little-Endian,其實(shí)指的都是同一個(gè)東東!在計(jì)算機(jī)界, 表示數(shù)據(jù)在存儲(chǔ)器中的存放順序. 不同的 CPU、操作系統(tǒng)對(duì)待數(shù)據(jù)的存儲(chǔ)方式各有不同,但一般常見(jiàn)的操作系統(tǒng)都是小端,而通訊協(xié)議則是大端。
但并不是說(shuō)系統(tǒng)是小端形式存儲(chǔ),文件就一定要采用小端的形式,不同的應(yīng)用程序?qū)τ谧陨頂?shù)據(jù)的存儲(chǔ)方式也各有千秋(自家數(shù)據(jù)愛(ài)咋放咋放,有些還打亂了加密呢),比如:
* Adobe PS -- 大端
* BMP -- 小端
* GIF -- 小端
* JPEG -- 大端
* MacPaint -- 大端
* RTF -- 小端
那么小端和大端有什么區(qū)別呢?舉個(gè)栗子大家就明了了:
比如 0x12345678 這個(gè)數(shù):
* 大端法在內(nèi)存中按字節(jié)依次存放為:12 34 56 78
* 小端法在內(nèi)存中按字節(jié)依次存放為:78 56 34 12
解釋:
大端:較高的有效字節(jié)存放在較低的存儲(chǔ)器地址,較低的有效字節(jié)存放在較高的存儲(chǔ)器地址。
比如整型變量 0x12345678 占 4 個(gè)字節(jié),那么根據(jù)內(nèi)存地址從小到大它們的存放方式如下:
數(shù)據(jù) 0x12 0x34 0x56 0x78
地址 0x10000000 0x10000001 0x10000002 0x10000003
小端:較高的有效字節(jié)存放在較高的的存儲(chǔ)器地址,較低的有效字節(jié)存放在較低的存儲(chǔ)器地址。所以整型變量 0x12345678 根據(jù)內(nèi)存地址從小到大它們的存放方式如下:
數(shù)據(jù) 0x78 0x56 0x34 0x12
地址 0x10000000 0x10000001 0x10000002 0x10000003
本文版權(quán)歸傳智播客C++培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客C/C++培訓(xùn)學(xué)院
首發(fā):http://xamj520.com/c/