很多同学都好奇:到底什么是十六进制?十六进制该怎么和其他进制互相转换?

大家都知道,计算机底层只认识二进制,日常生活中我们习惯使用十进制,但在编程、串口通信、工控 Modbus 协议中,十六进制无处不在。

这篇博客带你从零搞懂十六进制原理、进制转换方法,同时结合工控实战,彻底弄懂 Modbus 中 0x00、0x01 的真实含义。

一、什么是十六进制?

十六进制的规则:逢十六进一

可用数字字符:0-9、A、B、C、D、E、F

字母对应数值:A=10、B=11、C=12、D=13、E=14、F=15

在编程语言和工控协议中,0x 是十六进制的专属标识。只要看到 0x 开头,就代表这是十六进制数:

  • 0x00 → 十六进制 00

  • 0x01 → 十六进制 01

  • 0x0A → 十六进制 0A

  • 0xFF → 十六进制 FF

二、三大常用进制基础认知

我们开发中只需要掌握三种进制:

1. 二进制:只有 0、1,计算机底层唯一识别语言

2. 十进制:生活通用进制,0~9 组成,通俗易懂

3. 十六进制:编程、报文、工控首选进制

核心优势:精简二进制数据、可读性更强

黄金换算规律1 位十六进制 = 4 位二进制

这就是通信协议、串口报文全部喜欢用十六进制的原因:大幅缩短报文长度,方便工程师查看和解析数据。

三、零基础进制互相转换(必学)

1. 十六进制 → 十进制

计算规则:高位 × 16 + 低位

示例:

  • 0x00 = 0×16 + 0 = 0

  • 0x01 = 0×16 + 1 = 1

  • 0x0F = 0×16 + 15 = 15

  • 0x10 = 1×16 + 0 = 16

  • 0x64 = 6×16 + 4 = 100

2. 十进制 → 十六进制

计算规则:除 16 取余,逆序排列

示例1:十进制 10 转十六进制

10 ÷ 16 = 商 0,余数 10 → 对应字母 A

结果:10 = 0x0A

示例2:十进制 100 转十六进制

100 ÷ 16 = 商 6,余 4

6 ÷ 16 = 商 0,余 6

从下往上取余数:64

结果:100 = 0x64

3. 十六进制 ↔ 二进制

熟记一一对应关系:

0=0000、1=0001、2=0010、3=0011

4=0100、5=0101、6=0110、7=0111

8=1000、9=1001、A=1010、B=1011

C=1100、D=1101、E=1110、F=1111

示例:

0x01 = 0001

0x0A = 1010

四、重点实战:Modbus 中 0x 地址深度解析

在 C#、Java 开发 Modbus 主站、从站程序时,0x00、0x01 是最常见的写法,也是新手最容易混淆的知识点。

1. 寄存器两种地址写法

① 程序偏移地址(代码使用)

0x00、0x01、0x02,代表寄存器的偏移起始地址。

② 设备标准地址(上位机、触摸屏、组态使用)

保持寄存器:40001、40002、40003...

输入寄存器:30001、30002、30003...

核心换算公式(必考、必记)

程序偏移地址 = 设备标准地址 - 1

举例:

  • 设备 40001 → 代码偏移 0 → 0x00

  • 设备 40002 → 代码偏移 1 → 0x01

  • 设备 40005 → 代码偏移 4 →0x04

口诀:工控4开头地址,减1就是代码0x偏移地址

2. Modbus 中 0x 的真实使用场景

① 从站设备地址

byte slaveId = 0x01 等价十进制 1 号从站设备。

② 功能码标识

  • 0x03 = 读保持寄存器

  • 0x04 = 读输入寄存器

  • 0x06 = 写单个保持寄存器

③ 报文数据传输

串口 RTU、网络 TCP 的所有通信报文,本质都是十六进制字节流。我们控制台打印的 RX 接收数据、抓包数据,全部是 0x 格式十六进制数据。

④ 寄存器数值赋值

示例:_slave.DataStore.HoldingRegisters[0] = 0x64

本质就是给寄存器存入十进制 100。

五、开发实用小技巧

  • 代码中直接写 0x+数字,编译器自动识别十六进制,无需手动转换

  • 调试 Modbus 通信时,可将十六进制报文快速转十进制,校验收发数据是否一致

  • 工控项目统一使用0x 偏移地址 开发,避免标准地址、偏移地址混用出错

  • 寄存器 ushort 取值范围 0~65535,刚好对应十六进制最大值 0xFFFF

六、全文总结

  1. 0x 只是十六进制标识,没有实际数值作用,仅用于区分进制类型;

  2. 日常开发只需掌握 十六进制 <=> 十进制 互转即可;

  3. Modbus 核心规则:4 开头标准地址 -1 = 代码 0x 偏移地址

  4. 十六进制最大价值:精简二进制报文,是工控通信、底层开发的必备基础。

更多推荐