【发布时间】:2012-11-29 06:24:36
【问题描述】:
我真的很难完成这篇文章,任何想法或建议都会对我有很大帮助。这是我的问题:
我正在处理ISO 8583 层,数据元素 32 被定义为 n ..11,这意味着该元素是数字、可变长度,最大大小为 11。
这需要以二进制格式(不是 ASCII)发送。
我们需要显示 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