一,簡介
在計算機系統中,規定:每個地址單元都會對應一個字節(8個bit),但是,在c語言中,
除了有一個字節(8個bit)的char,也有兩個字節(16個bit)的short,
也有四個字節(32個bit)的long(在不同的編譯器下可能不同)。對於16位或者32位的處理器,
即就是大於8位的處理器,由於寄存器的寬度大於一個字節,
那么就存在如何將一個多字節的變量的數據如何存放的問題——所以,就有了大小端之分。
大端模式:是指數據的高字節保存在內存的低地址中,而數據的低字節保存在內存的高地址端。
小端模式,是指數據的高字節保存在內存的高地址中,低位字節保存在在內存的低地址端。
優勢,劣勢:
小端模式 :強制轉換數據不需要調整字節內容,1、2、4字節的存儲方式一樣。
大端模式 :符號位的判定固定為第一個字節,容易判斷正負。
二,java判斷大端小端示例:
long a = UNSAFE.allocateMemory(8);
try {
UNSAFE.putLong(a, 0x0102030405060708L);
//存放此long類型數據,實際存放占8個字節,01,02,03,04,05,06,07,08
byte b = UNSAFE.getByte(a);
//通過getByte方法獲取剛才存放的long,取第一個字節
//如果是大端,long類型順序存放—》01,02,03,04,05,06,07,08 ,取第一位便是0x01
//如果是小端,long類型順序存放—》08,07,06,05,04,03,02,01 ,取第一位便是0x08
switch (b) {
case 0x01:
ByteOrder byteOrder = ByteOrder.BIG_ENDIAN;
break;
case 0x08:
byteOrder = ByteOrder.LITTLE_ENDIAN;
break;
default:
assert false;
byteOrder = null;
}
}catch (Exception e){
}