3

我真的很难完成这篇文章,任何想法或指示都会对我有很大帮助。这是我的问题:

  1. 我正在研究ISO 8583层,数据元素 32 定义为 n ..11,这意味着该元素是数字、可变长度,最大大小为 11。

  2. 这需要以二进制格式(不是 ASCII)发送。

  3. 我们需要显示 LLNN,ex ISO 二进制原始文件应如下所示:11 06 01 04 00 00 00

到现在为止,我能够用 BCD(06 01 04 00 00 00) 填充大小为 6 的 (11/2)+(11%2) 字节 [] 数组。我得到了计算为 11 的字段的总长度,现在我需要在 byte[0] 处插入它,其中 11 不是 0B 即 0001 0001 打包到一个字节byte[]为 11 ,当我给出 nBytes=1 时,我的逻辑如下所示(BCD ISO 中的前 255 个字符)它将长度字段值插入为 0b 01 04 00 00 00,或者如果我将 nBytes 作为 2 传递,则它给出 00 0b 04 00 00 00。正确的移位逻辑出了点问题。 .

有人可以帮助我并更正以下逻辑以使结果为 11 06 01 04 00 00 00

int nBytes=1;
for (int i = nBytes - 1; i >= 0; i--) {
    buf[i] = (byte)(length & 0xFF);
    length >>= 8;
}
outstream.write(buf);
4

2 回答 2

0

我认为这个函数执行你正在寻找的 BCD 转换:

class T {
    public static byte toBCD(int n)
    {
        // a*10 + b -> a*16 + b;
        byte a = (byte)(n / 10);
        byte b = (byte)(n % 10);

        return (byte) (a * 0x10 + b);
    }

    public static void main(String[] args)
    {
        assert(toBCD(11) == 0x11);
        assert(toBCD(28) == 0x28);
    }
}
于 2012-12-14T00:38:42.867 回答
0

我终于使用了两个字节数组对象。一个持有原始请求并以十进制计算字段的长度并将其放在第一个位置,即辅助字节数组的 0 索引并将原始字节数组附加到此位置。

于 2012-12-21T18:30:28.140 回答