用java实现BCD码和十进制之间的转化 您所在的位置:网站首页 10进制转BCD进制 用java实现BCD码和十进制之间的转化

用java实现BCD码和十进制之间的转化

2024-07-01 21:50| 来源: 网络整理| 查看: 265

BCD码介绍

在有些协议场景中,有的字段要求传BCD码。 BCD码(Binary-Coded Decimal‎),也称二进制码十进制数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。 BCD码可分为有权码和无权码两类。其中,常见的有权BCD码有8421码、2421码、5421码,无权BCD码有余3码、余3循环码、格雷码。8421 BCD码是最基本和最常用的BCD码,它和四位自然二进制码相似,各位的权值为8、4、2、1,故称为有权BCD码。 我们今天的java代码以8421码为例。 在这里插入图片描述

Java代码实现

定义一个类BcdCodeTransfer实现十进制字符串和BCD码的互转功能:

/** * 类中使用的BCD码是8421 BCD码 * @author thb * */ public class BcdCodeTransfer { /** * 将BCD码转换为十进制的字符串。举例: * 如果BCD码为00010010,转换后的十进制字符串为"12" * 如果BCD码为00000010,转换后的十进制字符串为"2" * 如果BCD码为00000001 00100011,转换后的十进制字符串为"123" * @param bcd BCD码 * @return 十进制字符串 */ public static String bcdToDecimalString(byte[] bcd) { StringBuffer sb = new StringBuffer(); // 存放转化后的十进制数字的字符串 String decStr; for (int i = 0; i < bcd.length; i++) { // 每个字节的前四位的值右移4位转化为十进制数 sb.append((bcd[i] & 0XF0) >> 4); sb.append(bcd[i] & 0X0F); } // 如果转化后的字符串首字母为0,那么去掉 if (sb.charAt(0) == '0') { decStr = sb.substring(1); }else { decStr = sb.toString(); } return decStr; } /** * 十进制字符串转BCD码。举例: * 如果十进制字符串为"2",转换后的BCD码为00000010 * 如果十进制字符串为"12",转换后的BCD码为00010010 * 如果十进制字符串为"123",转换后的BCD码为00000001 00100011 * @param decStr 十进制字符串 * @return BCD码 * @throws Exception */ public static byte[] decimalStringToBcd(String decStr) throws Exception { // 因为可能修改字符串的内容,所以构造StringBuffer StringBuffer sb = new StringBuffer(decStr); // 一个字节包含两个4位的BCD码,byte数组中要包含偶数个BCD码 // 一个十进制字符对应4位BCD码,所以如果十进制字符串的长度是奇数,要在前面补一个0使长度成为偶数 if ((sb.length() % 2) != 0) { sb.insert(0, '0'); } // 两个十进制数字转换为BCD码后占用一个字节,所以存放BCD码的字节数等于十进制字符串长度的一半 byte[] bcd = new byte[sb.length() / 2]; for (int i = 0; i < sb.length();) { if (!Character.isDigit(sb.charAt(i)) || !Character.isDigit(sb.charAt(i + 1))) { throw new Exception("传入的十进制字符串包含非数字字符!"); } // 每个字节的构成:用两位十进制数字运算的和填充,高位十进制数字左移4位+低位十进制数字 bcd[i/2] = (byte)((Character.digit(sb.charAt(i), 10)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有