`

BCD Conversion in java

 
阅读更多
/**
 *  Copyright 2010 Firat Salgur
 *  
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *  
 *      http://www.apache.org/licenses/LICENSE-2.0
 *  
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *  
 */
public class BCD {

    public static byte[] DecimalToBCD(long num) {
        int digits = 0;

        long temp = num;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }

        int byteLen = digits % 2 == 0 ? digits / 2 : (digits + 1) / 2;

        byte bcd[] = new byte[byteLen];

        for (int i = 0; i < digits; i++) {
            byte tmp = (byte) (num % 10);

            if (i % 2 == 0) {
                bcd[i / 2] = tmp;
            } else {
                bcd[i / 2] |= (byte) (tmp << 4);
            }

            num /= 10;
        }

        for (int i = 0; i < byteLen / 2; i++) {
            byte tmp = bcd[i];
            bcd[i] = bcd[byteLen - i - 1];
            bcd[byteLen - i - 1] = tmp;
        }

        return bcd;
    }

    public static long BCDToDecimal(byte[] bcd) {
        return Long.valueOf(BCD.BCDtoString(bcd));
    }
    
    public static String BCDtoString(byte bcd) {
        StringBuffer sb = new StringBuffer();
        
        byte high = (byte) (bcd & 0xf0);
        high >>>= (byte) 4;    
        high = (byte) (high & 0x0f);
        byte low = (byte) (bcd & 0x0f);
        
        sb.append(high);
        sb.append(low);
        
        return sb.toString();
    }
    
    public static String BCDtoString(byte[] bcd) {
        StringBuffer sb = new StringBuffer();
    
        for (int i = 0; i < bcd.length; i++) {
            sb.append(BCDtoString(bcd[i]));
        }
    
        return sb.toString();
    }
    
    public static void main(String[] args) {
        System.out.println("Testing DecimalToBCD:");
        BCD.testForValue(1L,        "00000001");
        BCD.testForValue(11L,       "00010001");
        BCD.testForValue(111L,      "0000000100010001");
        BCD.testForValue(1111L,     "0001000100010001");
        BCD.testForValue(11111L,    "000000010001000100010001");
        BCD.testForValue(42,        "01000010");
        BCD.testForValue(112233L,   "000100010010001000110011");
        BCD.testForValue(12345L,    "000000010010001101000101");
        
        System.out.println("\nTesting two way conversion using DecimalToBCD and back using BCDToDecimal:");
        BCD.testForValue(1L);
        BCD.testForValue(11L);
        BCD.testForValue(111L);
        BCD.testForValue(1111L);
        BCD.testForValue(11111L);
        BCD.testForValue(12983283L);
        BCD.testForValue(9832098349L);
    }
    
    private static void testForValue(long val, String expected) {
        String binaryString = BCD.byteArrayToBinaryString(BCD.DecimalToBCD(val));
        System.out.print(String.format("Testing: %10d -> %30s %4s\n", val, binaryString, binaryString.equals(expected) ? "[OK]" : "[FAIL]"));
    }
    
    private static void testForValue(long val) {
        long newVal = BCD.BCDToDecimal(BCD.DecimalToBCD(val));
        
        System.out.print(String.format("Testing: %10d -> %30d %4s\n", val, newVal, newVal == val ? "[OK]" : "[FAIL]"));
    }
    
    private static String byteArrayToBinaryString(byte[] bytes) {
        StringBuffer sb = new StringBuffer();
        for (byte i : bytes) {
            String byteInBinary = String.format("%8s", Integer.toBinaryString(i)).replace(' ', '0');
            sb.append(byteInBinary);
        }
        return sb.toString();
    }
}

 

BCD変換 (Binary-coded decimal, 二進化十進数, byte[])
初めて、BCD変換をJAVAで対応したので、ついでにメモしとく

 

 

参考:

1)https://gist.github.com/neuro-sys/953548#file-test_output-txt

2)アンパック10進数

3)パック10進数

4)IccUtils

5)Algorithm to convert a String of decimal digits to BCD

 

分享到:
评论

相关推荐

    BCD.rar_16二进制转bcd_bcd_bcd conversion_二进制转BCD码

    标题中的"BCD.rar_16二进制转bcd_bcd_bcd conversion_二进制转BCD码"表明这个压缩包包含了一个关于将16位二进制数转换为4位BCD码的程序或算法。 在16位二进制转4位BCD码的过程中,我们首先理解二进制和BCD码的基本...

    Java Language Conversion Assistant

    Java Language Conversion Assistant is a tool that automatically converts existing Java-language code into Visual C#® Quick Info File Name:VS7.1-KB819018-X86.exe Download Size:10092 KB Date Published:...

    Java Language Conversion Assistant 2.0

    Java Language Conversion Assistant 是一种工具,它为那些想把现有的应用程序转到 .NET Framework 上的开发者实现从 Java 语言代码到 Visual C#&reg; 的自动转换。 支持的操作系统: Windows 2000, Windows Server ...

    Demo1Conversion.java

    Demo1Conversion.java

    groupdocs-conversion-java-maven-sample

    ##GroupDocs.Conversion for Java ####Maven 示例 1.1.0如何安装/运行#####Windows/Linux/MacOS 下载 Java 库的 GroupDocs.Conversion 将 Java 库的 GroupDocs.Conversion 安装到本地 maven 存储库 将示例源下载到...

    Unit conversion in LBM.zip_Unit conversion in_lBM参数换算·_lbm单位换算_单

    格子玻尔兹曼方法中的单位换算方法,ppt讲义

    Hex-conversion.rar_HEX BCD_bcd 16进制_conversion

    标题中的"Hex-conversion.rar_HEX BCD_bcd 16进制_conversion"明确指出我们要探讨的是关于十六进制(Hex)、二进制(Binary)和BCD码(Binary Coded Decimal)之间的转换。描述中提到的“各种进制间的转化函数”...

    worldwindjava源码-Geo-Coordinate-Conversion-Java:NASAWorldWind的坐标转换功能

    世界风java源码地理坐标转换-Java 来自 NASA World Wind 项目的不同地理空间坐标系(Lat/Lon、UTM、UPS 和 MGRS)之间的转换功能(他们从用 C 编写的 GDAL 库翻译),减去对 AWT、图形库的所有依赖,他们的自定义...

    LeetCode6 ZigZag Conversion

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility) Java AC版本

    C-Java--program-conversion.rar_C++_ Java_conversion

    "C-Java--program-conversion.rar"文件很可能是这个转换系统的一个原型实现,包含有关如何构建这样的系统的详细信息。 C++和Java虽然都是面向对象的编程语言,但它们之间存在显著的差异。C++以其低级控制和性能著称...

    conversion:Java 中的小型转换库

    转换库 只是一个包含不同方案的辅助类的小型库。 此时它只包含一个 Base64 编码类。 Base64 编码 二进制到文本编码以 ASCII 字符串格式呈现二进制数据。 测试基于以下 wiki 页面中的示例: :

    conversion_afn_afd_SmahiRezgui_java_conversion_

    标题中的"conversion_afn_afd_SmahiRezgui_java_conversion_"表明这是一个关于在Java环境中进行自动机转换的项目,具体来说是将有穷状态自动机(AFN)转换为等价的确定有限状态自动机(AFD)。这个转换过程在形式...

    Sample Rate Conversion in Software Configurable Radios

    本文将详细探讨软件无线电中样本率转换(Sample Rate Conversion, SRC)的原理和实现方法,特别是数字上变频(Digital Up-Conversion, DUC)和数字下变频(Digital Down-Conversion, DDC)中的抽取和插值技术,以及...

    C#编程 WinForm窗体开发 Conversion(源码)

    C#编程 WinForm窗体开发 Conversion(源码)C#编程 WinForm窗体开发 Conversion(源码)C#编程 WinForm窗体开发 Conversion(源码)C#编程 WinForm窗体开发 Conversion(源码)C#编程 WinForm窗体开发 Conversion(源码)C#...

    java-leetcode题解之006-ZigZag-Conversion

    java入门 java_leetcode题解之006_ZigZag_Conversion

    javaSwing各种主题窗口

    Java Swing 是Java GUI(图形用户界面)库的一部分,它提供了丰富的组件和工具来构建桌面应用程序。Swing 提供了多种窗口主题,使得开发者可以为应用创建具有不同视觉风格的界面,以适应不同的操作系统环境,如 ...

    C# to Java 代码转换工具

    Folder conversion: Entire folders of C# code files are converted to Java code files.(文件夹转换) 2. Code snippet and file conversion: Our snippet conversion accuracy is outstanding and does not ...

    Conversion Optimization

    转换优化(Conversion Optimization),也称为转化率优化,是数字营销领域的一个重要概念,它涉及到如何提高网站或在线应用中用户的转化率。转化率是指将网站访问者转化为实际购买者、注册用户、下载者或完成任何...

    JConvert - Unit Conversion (Java based)-开源

    JConvert 是一个免费的单位转换程序,具有友好的用户界面,也可以与外部应用程序一起使用。 可以轻松修改和/或添加转换。 支持多种语言。 下载并在几秒钟内运行! 现在就试试。

    JavaServer Faces in Action(英文版)

    这本书《JavaServer Faces in Action》是JSF学习者的重要参考资料,通过其英文版,读者可以更深入地理解JSF的原理和实践应用。 JSF的核心概念包括以下几个方面: 1. **组件(Components)**:JSF中的组件类似于UI...

Global site tag (gtag.js) - Google Analytics