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