【问题标题】:Insert byte at location 0 and right shift the remaining data bits在位置 0 处插入字节并右移剩余的数据位
【发布时间】:2012-11-29 06:24:36
【问题描述】:

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

  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[]as 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);

【问题讨论】:

  • 你为什么要移位?您不能只创建发送 ISO 8583 消息所需的字节吗?添加一个包含 11 个十六进制或 17 个十进制的字节,并将其添加到其他字节。
  • @Gilbert:感谢 Gilbert 回来,我可以,我想避免创建多个数组对象...如果可以注意右移,那就太好了...我已经实现了基于解决方案根据您的输入...只需检查主机端以查看它是否正确解码...我会尽快更新您这个新修复的进展情况..
  • @Gilbert: 17 位十进制方式在 ISO 系统上完美运行......谢谢你的想法......
  • 你能解释一下11 06 01 04 00 00 00吗? wat 是(11/2)+(11%2)? 的意思,nBytes 又是什么意思?另外,前面的buf[]内容是什么?

标签: java bit-manipulation iso8583


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我认为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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多