调串口协议时抓到一帧数据 0x1A 0x2F,手册上给的是十进制阈值,得先换算。十六进制转十进制方法不难,记住按位乘 16 的幂再相加这一条,手算和工具都能对上。

手算:从右往左,权值是 16 的幂

以 0x2F 为例,F 代表 15,2 在十六位,计算是 2×16 + 15 = 47。两位的 0xFF 就是 15×16 + 15 = 255。四位的 0x1A2B,拆成 1×4096 + 10×256 + 2×16 + 11 = 6699。字母 A 到 F 分别对应 10 到 15,大小写不影响结果,前面的 0x 只是标记,不参与计算。位数多的时候从右往左标 1、16、256、4096,不容易漏项。多位转换时先分组,比如 0x1234 拆成 0x12 和 0x34,分别算 18 和 52,再按 256 加权:18×256+52=4660,跟直接算结果一样。

心算技巧:按字节记几个节点

两位十六进制正好一个字节,0x00 到 0xFF 对应 0 到 255。记住 0x10=16、0x20=32、0x40=64、0x80=128 这几个节点,看到 0x3C 就能估出 48+12=60。调寄存器、看颜色代码时够用了。0x7F 就是 127,0xFF 是 255,看子网掩码时经常碰到。超过四位的地址值还是交给工具,手算容易错位,一个字母看错结果差很远。

计算器和代码里的换算

Windows 计算器切到程序员模式,选 HEX 输入,再点 DEC 就出结果,长按还能看二进制。Excel 用 HEX2DEC 函数,参数填 FF 这样的文本,结果是 255。Python 写 int('1a2b', 16),JavaScript 用 parseInt('1a2b', 16),命令行里 printf '%d' 0x2F 也能直接输出 47。写代码时注意有些语言要求字符串不带 0x 前缀。手机自带的计算器多数没有进制转换,科学计算器类 App 更顺手,敏感数据别丢进陌生网页工具。

十六进制转十进制方法就这些,日常调试记住两位字节的对应关系,复杂数值交给计算器。换算完顺手反算一遍,比如 47 除 16 得 2 余 15,对得上就没算错。十进制转回十六进制用短除法,除以 16 取余数倒着写,可以拿来验算。刚开始慢,算十几次就顺了。