首页 > 编程语言 >Java实现BCD编码与十进制转换

Java实现BCD编码与十进制转换

时间:2022-08-22 11:38:57浏览次数:55  
标签:Java BCD len asc abt byte 十进制

1、BCD码介绍

  • BCD码(Binary-Coded Decimal‎)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免却使电脑作浮点运算时所耗费的时间。此外,对于其他需要高精确度的计算,BCD编码亦很常用。
  • BCD码是四位二进制码, 也就是将十进制的数字转化为二进制, 但是和普通的转化有一点不同, 每一个十进制的数字0-9都对应着一个四位的二进制码,对应关系如下: 十进制0 对应 二进制0000 ;十进制1 对应二进制0001 ....... 9 1001 接下来的10就有两个上述的码来表示 10 表示为00010000 也就是BCD码是遇见1001就产生进位,不象普通的二进制码,到1111才产生进位10000
  • 在Java通信应用中,往往我们接收到数据流,而流是BCD编码后的。因此我们要转码来获得我们想要的十进制数据。

 

2、常见BCD码

 

3、JAVA实现

/** 
 * 编码工具类 
 *  
 * @author 崔素强 
 * @see BCD与十进制的转换 
 */  
public class BCDDecode {  
    /** 
     * @功能:测试用例 
     * @参数: 参数 
     */  
    public static void main(String[] args) {  
        byte[] b = str2Bcd("2010");  
        System.out.println(bcd2Str(b));  
    }  
  
    /** 
     * @功能: BCD码转为10进制串(阿拉伯数据) 
     * @参数: BCD码 
     * @结果: 10进制串 
     */  
    public static String bcd2Str(byte[] bytes) {  
        StringBuffer temp = new StringBuffer(bytes.length * 2);  
        for (int i = 0; i < bytes.length; i++) {  
            temp.append((byte) ((bytes[i] & 0xf0) >>> 4));  
            temp.append((byte) (bytes[i] & 0x0f));  
        }  
        return temp.toString().substring(0, 1).equalsIgnoreCase("0") ? temp  
                .toString().substring(1) : temp.toString();  
    }  
  
    /** 
     * @功能: 10进制串转为BCD码 
     * @参数: 10进制串 
     * @结果: BCD码 
     */  
    public static byte[] str2Bcd(String asc) {  
        int len = asc.length();  
        int mod = len % 2;  
        if (mod != 0) {  
            asc = "0" + asc;  
            len = asc.length();  
        }  
        byte abt[] = new byte[len];  
        if (len >= 2) {  
            len = len / 2;  
        }  
        byte bbt[] = new byte[len];  
        abt = asc.getBytes();  
        int j, k;  
        for (int p = 0; p < asc.length() / 2; p++) {  
            if ((abt[2 * p] >= '0') && (abt[2 * p] <= '9')) {  
                j = abt[2 * p] - '0';  
            } else if ((abt[2 * p] >= 'a') && (abt[2 * p] <= 'z')) {  
                j = abt[2 * p] - 'a' + 0x0a;  
            } else {  
                j = abt[2 * p] - 'A' + 0x0a;  
            }  
            if ((abt[2 * p + 1] >= '0') && (abt[2 * p + 1] <= '9')) {  
                k = abt[2 * p + 1] - '0';  
            } else if ((abt[2 * p + 1] >= 'a') && (abt[2 * p + 1] <= 'z')) {  
                k = abt[2 * p + 1] - 'a' + 0x0a;  
            } else {  
                k = abt[2 * p + 1] - 'A' + 0x0a;  
            }  
            int a = (j << 4) + k;  
            byte b = (byte) a;  
            bbt[p] = b;  
        }  
        return bbt;  
    }  
}  

 

原文链接:https://blog.csdn.net/boonya/article/details/83537827

 

标签:Java,BCD,len,asc,abt,byte,十进制
From: https://www.cnblogs.com/hunttown/p/16612229.html

相关文章

  • 【JavaScript】各种手写题汇总复习
    防抖functionthrottle(fun,time){lettimer=nullreturn()=>{if(timer){return}fun()timer=setTimeout(()=>{time......
  • 【Java基础】循环结构for、while、嵌套循环、关键字break、continue
    1.for循环for(inti=0;i<10;i++){System.out.println(i);}执行过程说明(1)循环条件部分②为boolean类型表达式,当值为false时,......
  • Java企业级开发中异常处理的问题
    在企业级开发中,异常的处理和学习中的异常处理差别还是挺大的;在学习中我们了解的是异常的分类和处理异常的方法,而在真实工作中我们要注重异常处理是否得当,因为不得当的异......
  • JAVA---04
    第四天1.Java方法什么是方法方法是语句的集合,它们在一起执行一个功能方法是解决一类问题的步骤的有序组合方法包含于类或对象中......
  • java线上问题跟踪工具Arthas的第一次使用
    Arthas是一款线上监控诊断产品,通过全局视角实时查看应用load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异......
  • js拆分选择题各选项【javascript将选择题选项通过正则表达式拆分出来】
    最近做题库项目需要添加试题,尤其是选择题逐个添加各选项很繁琐。通过以下正则表达式可以将选择题题目、选项迅速分离出来,并自动添加到选项文本框$("#split").clic......
  • Java中String和byte类型互相转换
    1、string转byte[]StringinStr="helloworld";byte[]bytes=inStr.getBytes(StandardCharsets.UTF_8); 2、byte[]转stringStringoutSrt=newString(by......
  • Java中数字的四舍五入和取整
    1、向上取整ceilceil的英文意思:天花板,所以向上取整就比较好记忆Math.ceil(1.01)#结果:2 2、向下取整floorfloor的英文意思:地板,所以向下取整Math.floor(1.6)#......
  • 序言 - JavaScript指南
    序  言 对于JavaScript,一直想写点什么。成为软件工程师是很早的事情了,接触JavaScript也算比较早吧,在大学时,与不少程序员一样,在电脑前通宵达旦几天也不觉得疲倦。......
  • java中的数据传递方式
    java的传值方式目录结论分析结论首先说结论:java基本是值传递分析关于这个问题,其实一直以来都很有争论的,我也是为此查询了很多资料,在此发表一下自己的拙见。我们从内......