在位置0插入字节并右移其余数据位

时间:2012-12-11 16:46:54

标签: java bit-manipulation iso8583

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

  1. 我正在处理ISO 8583图层,数据元素32定义为n ..11,表示该元素为数字,可变长度,最大尺寸为11。

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

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

  4. 直到现在我能够用BCD(06 01 04 00 00 00)完成填充(11/2)+(11%2)大小为6的byte []数组。并且我得到了字段的总长度计算为11,现在我需要在字节[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);
    

2 个答案:

答案 0 :(得分:0)

我认为this function执行您正在寻找的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);
    }
}

答案 1 :(得分:0)

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