我有一个web服务,它接受此作为有效负载:
{
"MTI": "0100",
"2": "4655206331051889",
"3": "000000",
"4": "000000012300",
"7": "0321054133",
"11": "001205",
"14": "0325",
"18": "5399",
"22": "022",
"25": "00",
"35": "2312312332",
"37": "206305000014",
"41": "29110001",
"42": "1001001",
"49": "840",
"transactionid": "12",
"co-ordinates": "3042304,293572945"
}
这是打包并生成iso消息表示的代码:
for (Map.Entry<Object, Object> entry : attributes.entrySet()) {
if (entry.getKey().equals("transactionid")) {
msg.set(6, entry.getValue().toString());
} else if (entry.getKey().equals("MTI")) {
msg.setMTI(entry.getValue().toString());
} else if (entry.getKey().equals("co-ordinates")) {
String[] coordinates = entry.getValue().toString().split(",");
msg.set(57, coordinates[0]);
msg.set(58, coordinates[1]);
} else msg.set(Integer.parseInt(entry.getKey().toString()), entry.getValue().toString());
}
msg.setPackager(new ISO87BPackager());
byte[] packedMsg = msg.pack();
System.out.println(ISOUtil.hexdump(packedMsg));
结果如下:
0000 01 00 76 24 44 80 28 C0 80 C0 16 46 55 20 63 31 ..v$D.(....FU c1
0010 05 18 89 00 00 00 00 00 00 01 23 00 00 00 00 00 ..........#.....
0020 00 12 03 21 05 41 33 00 12 05 03 25 53 99 00 22 ...!.A3....%S.."
0030 00 10 23 12 31 23 32 32 30 36 33 30 35 30 30 30 ..#.1#2206305000
0040 30 31 34 32 39 31 31 30 30 30 31 31 30 30 31 30 0142911000110010
0050 30 31 20 20 20 20 20 20 20 20 38 34 30 00 07 33 01 840..3
0060 30 34 32 33 30 34 00 09 32 39 33 35 37 32 39 34 042304..29357294
0070 35 5
现在我想排除第一列以0000开头,第四列看起来像加密之类的。。。所以我希望在最后有第二列的开始到第四列之前的结束。。。
预期产量:
01007624448028C080C016465520633105188900000000000001230000000000001203210541330012050325539900220010231231233232303633303530303030313432393131303030313130303130303120202020202020203834300007333034323330340009323933353732393435
提前谢谢
1条答案
按热度按时间iswrvxsc1#
这个
ISOUtil.hexdump
您在这里使用的方法似乎返回传入的数据的可读表示。您应该搜索同一个库或另一个库来转换byte[]
转换为十六进制字符串。在这个问题的答案中有一些很好的选择:如何在java中将字节数组转换成十六进制字符串?
详细说明:
您看到的三列输出是十六进制数据的传统表示法:第一列是行中第一个字节的十六进制/二进制地址;第二列是数据本身,以十六进制表示,用空格分隔的字节表示;第三列显示行上字节的ascii表示。其中一些,主要是下面的字符
0x21
是不可打印的,因此只能用一个点来表示(.
)在此陈述中。这种检查二进制数据的方法在hex编辑器等实用程序中非常常见。确实有一个posix/bsd实用程序,
hexdump
,显示此粗略格式。