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算法跟设备端交互传输字节数组

相关推荐
二十雨辰15 小时前
[Java]-JVM面试题
java·开发语言·jvm
cfm_291415 小时前
ConcurrentHashMap 线程安全机制与 JDK 1.8 演进
java·开发语言·安全
tqs_1234515 小时前
值传递与引用传递
java·开发语言·python
2601_9621819615 小时前
Spring boot从0到1 - day01
java·spring boot·后端
典典分享指南15 小时前
短视频分镜提示词:让 AI 出片的产品口播
java·c#·bash·composer·symfony
IT_Octopus15 小时前
G1 与 GC 日志入门课程(以本次离线菜单 Full GC 事故为教材)
java·jvm
cfm_291415 小时前
ReentrantLock 中 lock 与 tryLock 核心区别
java
.Hypocritical.15 小时前
Tomcat本地部署+远程服务器部署超详细教程
java·服务器·tomcat
码视野15 小时前
基于 Spring Boot + Vue3 的【智慧公厕微负压排风除臭与客流人感空间占用导引中台】设计与实现(含PRD/三端高保真源码/大屏)
前端·vue.js·人工智能·spring boot·后端
2601_9620629415 小时前
Spring Boot入门——Spring Boot项目的创建
java·数据库·spring boot