Java实现字节转bcd编码

前言

BCD(Binary-Coded Decimal)是一种将十进制数字编码为二进制的表示方式

bad实现

arduino 复制代码
public class BcdCodeUtil {

    public static String bcdToDecimalString(byte[] bcd) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bcd) {
            sb.append((b & 0xF0) >> 4); // 高4位
            sb.append(b & 0x0F); // 低4位
        }
        return sb.charAt(0) == '0' ? sb.substring(1) : sb.toString(); // 去掉前导零
    }

    public static byte[] stringToUncompactBCD(String decimalStr) {
        if (decimalStr == null || decimalStr.isEmpty()) {
            throw new IllegalArgumentException("输入字符串不能为空");
        }
        if (!decimalStr.matches("\d+")) {
            throw new IllegalArgumentException("输入必须是纯数字字符串");
        }

        byte[] bcd = new byte[decimalStr.length()];
        for (int i = 0; i < decimalStr.length(); i++) {
            int digit = Character.digit(decimalStr.charAt(i), 10);
            bcd[i] = (byte) (digit & 0x0F); // 只使用低4位
        }
        return bcd;
    }

    public static void main(String[] args) {
        String data = "123478254";
        byte[] bcd = stringToUncompactBCD(data);
        String str = bcdToDecimalString(bcd);
        System.out.println(str);
    }

}

输出结果为

总结

可以用bcd算法跟设备端交互传输字节数组

相关推荐
235167 分钟前
【JVM】Java为啥能跨平台?JDK/JRE/JVM的关系?
java·开发语言·jvm·spring boot·后端·spring·职场和发展
courtfu18 分钟前
Plugin ‘mysql_native_password‘ is not loaded`
java·后端
枫子有风20 分钟前
Go语言流程控制
android·java·golang
上进小菜猪1 小时前
测试自动化Replay:让数据库迁移测试回归真实场景的一把“利器”
后端
Python私教1 小时前
FastAPI × SQLAlchemy 2.0 Async:从“能跑”到“可压测”的完整工程实践
后端
小裕哥略帅1 小时前
订单管理--实时算出在途数量、收货数量、到货数量、已发货数量和未发货数量
java·开发语言
Python私教1 小时前
FastAPI × Loguru:从“能跑”到“可运维”的日志实战
后端
Dxxyyyy1 小时前
零基础学JAVA--Day27(注释+异常+异常处理方法)
java·开发语言
Craaaayon2 小时前
如何选择两种缓存更新策略(写缓存+异步写库;写数据库+异步更新缓存)
java·数据库·redis·后端·缓存·mybatis
AAA卷不动了2 小时前
JVM(二)------ 类加载、初始化与单例模式的联系
java·jvm·单例模式