我已经从这里https://github.com/vikrantlabde/iso8583-Java下载了代码,经过一些修改后,我几乎可以很好地解析我的字段......我定义了这样的架构:
ISOSCHEMA.put("1","BITMAP");
ISOSCHEMA.put("2","NUM-2-19-0_0");
ISOSCHEMA.put("3","NUMERIC-0-6-0_0");
ISOSCHEMA.put("4","NUMERIC-0-12-0_0");
ISOSCHEMA.put("7","NUMERIC-0-10-0_0");
ISOSCHEMA.put("11","NUMERIC-0-6-0_0");
ISOSCHEMA.put("12","NUMERIC-0-6-0_0");
ISOSCHEMA.put("13","NUMERIC-0-4-0_0");
ISOSCHEMA.put("22","NUMERIC-0-3-0_0");
ISOSCHEMA.put("23","NUMERIC-0-3-0_0");
ISOSCHEMA.put("35","NUM-2-37-0_0");
ISOSCHEMA.put("41","FCHAR-0-8-0_0");
ISOSCHEMA.put("49","FCHAR-0-3-0_0");
ISOSCHEMA.put("55","NUM-3-999-0_0");
问题是字段 55,它是一个二进制字段。标准文档说:
55 保留 ISO B 255 LLLVAR(ISO 文档)
我在解析为字段 55 打开位图的字符串时出错。
I'm having from the output: 820200409F36020004950500000000009A031409039C01005F2A020 978 9F02060000000005009F03060000000000009F10201F430200200000000000000000045895000000000000000000000000000000009F260840D26C4BA5577CFB9F2701809F370443DD7E879F1A0202509F3303E0B0C8
But I expect: 820200409F36020004950500000000009A031409039C01005F2A020 124 9F02060000000005009F03060000000000009F10201F430200200000000000000000045895000000000000000000000000000000009F260840D26C4BA5577CFB9F2701809F370443DD7E879F1A0202509F3303E0B0C8
转换后的 iso 有效载荷的长度也有很大不同......
程序输出为:
What I expect is: 30313030723806002080820031363635343332313131323233333434353530303030303030303030303030303030303131303136313833343236303032333934313333343330313031363037313030313337363534333231313132323333343435353D33313130323230303039323833303031303130323834303137343039313234313135820200409F36020004950500000000009A031409039C01005F2A0201249F02060000000005009F03060000000000009F10201F430200200000000000000000045895000000000000000000000000000000009F260840D26C4BA5577CFB9F2701809F370443DD7E879F1A0202509F3303E0B0C8
一个建议是:我必须从结果 byte[] 显式转换为十六进制,反之亦然。这是:
String isoMessage = ISOUtil.hexString(packIsoMsg("0100", isofields).getBytes());
和:
unpackIsoMsg(new String(ISOUtil.hex2byte(isoMessage), "UTF-8"));
那么这个类中这种字段的定义呢?我真的是标准的新手,但我来到这里是因为 jpos 在 Android 环境中不起作用。我也对最后提到的转换为十六进制感到困惑。
任何帮助都非常感谢......亲切的问候。