大小端模式:

創(chuàng)新互聯(lián)在網(wǎng)站設計、網(wǎng)站制作、成都app軟件開發(fā)、網(wǎng)站運營等方面均有出色的表現(xiàn),憑借多年豐富的經(jīng)驗,我們會仔細了解各客戶的需求而做出多方面的分析、設計、整合,為客戶設計出具風格及創(chuàng)意性的商業(yè)解決方案,我們更提供一系列網(wǎng)絡營銷推廣,網(wǎng)站制作和網(wǎng)站推廣的服務,以推動各中小企業(yè)全面信息化,并利用創(chuàng)新技術幫助各行業(yè)提升企業(yè)形象和運營效率。
大端模式,是指數(shù)據(jù)的高字節(jié)保存在內存的低地址中,而數(shù)據(jù)的低字節(jié)保存在內存的高地址中,這樣的存儲模式有點兒類似于把數(shù)據(jù)當作字符串順序處理:地址由小向大增加,而數(shù)據(jù)從高位往低位放;這和我們的閱讀習慣一致。
小端模式,是指數(shù)據(jù)的高字節(jié)保存在內存的高地址中,而數(shù)據(jù)的低字節(jié)保存在內存的低地址中,這種存儲模式將地址的高低和數(shù)據(jù)位權有效地結合起來,高地址部分權值高,低地址部分權值低。
下面以unsigned int value = 0x12345678為例,分別看看在兩種字節(jié)序下其存儲情況,我們可以用unsigned char buf[4]來表示value
高地址
---------------
buf[3] (0x78) -- 低位
buf[2] (0x56)
buf[1] (0x34)
buf[0] (0x12) -- 高位
---------------
低地址
高地址
---------------
buf[3] (0x12) -- 高位
buf[2] (0x34)
buf[1] (0x56)
buf[0] (0x78) -- 低位
--------------
低地址
| 內存地址 | 小端模式存放內容 | 大端模式存放內容 |
| 0x4000 | 0x78 | 0x12 |
| 0x4001 | 0x56 | 0x34 |
| 0x4002 | 0x34 | 0x56 |
| 0x4003 | 0x12 | 0x78 |
下面我們來看一下測試代碼:
#include<stdlib.h>
#include<stdio.h>
int8_t isBigEndian()
{
union
{
int i;
char c;
}test;
/*
*storage methods
*little endian: 10000000
*big endian: 00000010
*/
test.i = 2; //0x00000010
printf("test i addr:%x\t test c addr:%x\n",&test.i,&test.c);
printf("test i:%x\tlength:%d\t test c:%x\t length:%d\n",test.i,sizeof(test.i),test.c,sizeof(test.c));
return test.c != test.i;
}
void main()
{
printf("%x\n",isBigEndian());
}運行結果如下:
test i addr:d4f20b80 test c addr:test i addr:d4f20b80 test c addr:d4f20b80 test i:2 length:4 test c:2 length:1 0
從結果中可以看出,成員c和i是低字節(jié)對齊的,并且他兩的值都是2,但他們的長度卻不一樣,說明i的低字節(jié)存儲在i的首地址中,也就是按照低字節(jié)的方式存儲的,即小端模式.返回0.同理如果返回1,則說明他們是按照高字節(jié)的方式存儲,返回1,即大端模式.
如果需要,我們可以通過自定義宏對大小端進行轉換,如下:
#definesw16(x)\ ((short)(\ (((short)(x)&(short)0x00ffU)<<8)|\ (((short)(x)&(short)0xff00U)>>8)))
大小端目前的現(xiàn)狀
目前Intel的80x86系列芯片是唯一還在堅持使用小端的芯片,ARM芯片默認采用小端,但可以切換為大端;而MIPS等芯片要么采用全部大端的方式
儲存,要么提供選項支持大端——可以在大小端之間切換。另外,對于大小端的處理也和編譯器的實現(xiàn)有關,在C語言中,默認是小端(但在一些對于單片機的實現(xiàn)
中卻是基于大端,比如Keil 51C),Java是平臺無關的,默認是大端。在網(wǎng)絡上傳輸數(shù)據(jù)普遍采用的都是大端。
當前標題:判斷機器的大小端模式
本文網(wǎng)址:http://chinadenli.net/article36/jijisg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號、全網(wǎng)營銷推廣、外貿網(wǎng)站建設、外貿建站、、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)