字节序 高低地址和高低位及java modbus 字节序中的理解

先理解几个概念

1字节序

多个字节 之间排列的顺序

2字节高低位

例如16进制 0x12345678 占用了4个字节 那么1234就是高位 5678就是低位

3内存高低地址

数据存在在内存中时 需要先划分分出一个区域给数据保存

栈底 (高地址)
----------
buf[3]
buf[2]
buf[1]
buf[0]
----------
栈顶 (低地址)

那么数据存储就会有多种方式保存

最常用的就是 大端和小端

小端

a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。

大端
b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

Big-Endian: 低地址存放高位,如下图:
栈底 (高地址)
---------------
buf[3] (0x78) -- 低位
buf[2] (0x56)
buf[1] (0x34)
buf[0] (0x12) -- 高位
---------------
栈顶 (低地址)

Little-Endian: 低地址存放低位,如下图:
栈底 (高地址)
---------------
buf[3] (0x12) -- 高位
buf[2] (0x34)
buf[1] (0x56)
buf[0] (0x78) -- 低位
---------------
栈顶 (低地址)

4在网络编程中的使用

网络传输一般采用大端序,也被称之为网络字节序,或网络序

操作系统中会出现小端模式

那么为什么网络编程会是大端模式呢?

网络传输 过程中采用大端 会优先把 重要的信号信息发送给服务

5modbus tcp  大小端 在java网络编程中的说明

协议说明 modbus 读取设备线圈状态

 起始位地址  根据说明  起始位地址占用了 两个字节 第一个是高位字节 第二个是低位字节说明发送的数据就是采用了大端模式  已netty的ByteBuf buf 写入数据那么就是 java默认是大端模式

buf.writeShort(13)

如果某些协议采用小端模式怎么写入呢

buf.writeShortLE(a);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值