将十进制数字字符串转换为BCD的算法

尼科

我正在寻找一种将字符串转换为等效BCD的方法。我使用Java,但这并不是语言的问题。我试图逐步了解如何将字符串转换为BCD。

例如,假设我有以下字符串;

"0200" (This string has four ASCII characters, if we were in java this string had been contained in a byte[4] where byte[0] = 48, byte[1] = 50, byte[2] = 48 and byte[3] = 48)

在BCD中(根据此页面:http : //es.wikipedia.org/wiki/Decimal_codificado_en_binario):

0 = 0000
2 = 0010
0 = 0000
0 = 0000

好的,我认为转换是正确的,但是我必须将其保存在一个字节[2]中。我该怎么办?之后,我必须阅读BCD并将其转换为原始字符串“ 0200”,但首先我必须将String解析为BCD。

问候!

格尼克尔

查找实用程序类来为您完成此任务。肯定有人在那里写了Java的BCD转换实用程序。

干得好。我用Google搜索“ BCD Java”并将其作为第一个结果在此处复制代码以供将来参考。

public class BCD {

    /*
     * long number to bcd byte array e.g. 123 --> (0000) 0001 0010 0011
     * e.g. 12 ---> 0001 0010
     */
    public static byte[] DecToBCDArray(long num) {
        int digits = 0;

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

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

        byte bcd[] = new byte[byteLen];

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

            if (i == digits - 1 && isOdd)
                bcd[i / 2] = tmp;
            else if (i % 2 == 0)
                bcd[i / 2] = tmp;
            else {
                byte foo = (byte) (tmp << 4);
                bcd[i / 2] |= foo;
            }

            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 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();
    }
}

还有一个问题:Java代码或lib以从String解码二进制编码的十进制(BCD)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何防止JSONObject来自json.jar将十进制数字字符串转换为double

将float转换为具有精度和指定的十进制数字的字符串?

追加两个十进制数字字符串并解析为双精度

C#通过分隔数字将十进制转换为字符串

如何将罗马数字转换为十进制数字?

将数字(整数或十进制)转换为数组,将数组转换为数字(整数或十进制),而无需使用字符串

从Excel VBA中的字母数字字符串中提取十进制数字

如何将ASCII字符串转换为十进制数字?

将货币转换为十进制数字JavaScript

将字符串转换为十六进制,十进制和八进制

红宝石。将字符串拆分为单独的十进制数字

将十进制数字转换为Excel字母

Python-试图获取用户输入以转换为字符串并阻止用户输入非十进制数字的问题

使用python将十六进制十进制数字转换为十进制

将字符串转换为十进制(“ 3942.000000000000”)

将字符串编码为十进制数字-javascript

将ASCII字符串转换为十进制等效字符串-Java / Android

无法将十进制数字转换为SqlDecimal

将小数字符串转换为十进制

将二进制数字转换为十进制数字的Java程序。输入是零和一的字符串

将十进制数字从字符串转换为双精度

使用递归将二进制数字的字符串转换为十进制数字...

将大十六进制转换为十进制数字

如何在SQL Server中将IPv6地址从十进制数字字符串转换为两个bigints?

从字符串获取多十进制数字

将十进制数字转换为ASCII

将非整数十进制数字转换为二进制

使用 JavaScript 手动将十进制字符串转换为数字

将具有 1 个十进制数字的双数转换为 2 个数字