BigEndian和LittleEndian区别

MSB的意思是:

全称为Most Significant Bit,在二进制数中属于最高有效位,MSB是最高加权位,与十进制数字中最左边的一位类似

LSB的意思是:

全称为Least Significant Bit,在二进制数中意为最低有效位,一般来说,MSB位于二进制数的最左侧,LSB位于二进制数的最右侧

 

以数字0x01020304在两种不同字节序CPU中的存储顺序如下所示:

Big Endian

 低地址                                            高地址

 ----------------------------------------------------------------------------->

   |     01     |      02    |     03      |     04    |

Little Endian 

  低地址                                            高地址

 ----------------------------------------------------------------------------->

   |     04     |      03    |     02      |     01    |

 

private static byte int3(int x) { return (byte)(x >> 24); }
private static byte int2(int x) { return (byte)(x >> 16); }
private static byte int1(int x) { return (byte)(x >>  8); }
private static byte int0(int x) { return (byte)(x      ); }
// Big Endian
static void putIntB(ByteBuffer bb, int bi, int x) {
        bb._put(bi    , int3(x));
        bb._put(bi + 1, int2(x));
        bb._put(bi + 2, int1(x));
        bb._put(bi + 3, int0(x));
}
//Little Endian    
static void putIntL(ByteBuffer bb, int bi, int x) {
        bb._put(bi + 3, int3(x));
        bb._put(bi + 2, int2(x));
        bb._put(bi + 1, int1(x));
        bb._put(bi    , int0(x));
}

 

以图示例

BigEndian和LittleEndian区别_第1张图片

 

java是默认使用BIG_ENDIAN

ByteBuffer变更大小端


ByteBuffer byteBuffer = ByteBuffer.allocate(100);
//变大端
byteBuffer.order(ByteOrder.BIG_ENDIAN);
//变小端
byteBuffer.order(ByteOrder.LITTLE_ENDIAN);

 

大端:

BigEndian和LittleEndian区别_第2张图片 

 

小端:

BigEndian和LittleEndian区别_第3张图片

 

你可能感兴趣的:(nio)