java十六进制大小端转换_字节顺序

1、定义

字节顺序,又称端序或尾序(英语:Endianness),在计算机科学领域中,指电脑内存中或在数字通信链路中,组成多字节的字的字节的排列顺序。

在几乎所有的机器上,多字节对象都被存储为连续的字节序列。

2、表现形式

字节的排列方式有两个通用规则。例如,将一个多位数的低位放在较小的地址处,高位放在较大的地址处,则称小端序(Little-endian);反之则称大端序(Big-endian)。

在网络应用中,字节序是一个必须被考虑的因素,因为不同机器类型可能采用不同标准的字节序,所以均按照网络标准转化。

例如假设变量x类型为int,位于地址0xa处,它的值为0x0A0B0C0D,地址范围为0xa~0xa+3字节,其内部排列顺序依赖于机器的类型。(注: 0x前缀代表十六进制。)

2.1、小端序是:0xa: 0x0D, 0xa+1: 0x0C, ......

78a667013d3e

image

2.2、大端序是:0xa: 0x0A, 0xa+1: 0x0B, ......

78a667013d3e

image

2.3、混合序(middle-endian)具有更复杂的顺序。以PDP-11为例,0x0A0B0C0D被存储为:

78a667013d3e

image

混合序可以看作高16bit和低16bit以大端序存储,但16bit内部以小端存储。

3、其他

网络传输一般采用大端序,也被称之为网络字节序,或网络序。IP协议中定义大端序为网络字节序。

其他的,还有处理器的大小端序,串行设备传输的大小端序等等,有兴趣的可以另外继续研究。

4、字节顺序在Java的应用

public class Demo1 {

public static void main(String[] args) {

int x = 0x01020304;

ByteBuffer bb = ByteBuffer.wrap(new byte[4]);

bb.asIntBuffer().put(x);

String ss_before = Arrays.toString(bb.array());

System.out.println("默认字节序 " + bb.order().toString() + "," + " 内存数据 " + ss_before);

bb.order(ByteOrder.LITTLE_ENDIAN);

bb.asIntBuffer().put(x);

String ss_after = Arrays.toString(bb.array());

System.out.println("修改字节序 " + bb.order().toString() + "," + " 内存数据 " + ss_after);

}

}

运行结果:

默认字节序 BIG_ENDIAN, 内存数据 [1, 2, 3, 4]

修改字节序 LITTLE_ENDIAN, 内存数据 [4, 3, 2, 1]

所以Java 的默认字节序是大端序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值