如何从此字节[]中提取ISO消息表示?

如何解决如何从此字节[]中提取ISO消息表示?

我有一个接受它作为有效负载的网络服务:

{
    "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

提前致谢

解决方法

您在此处使用的 ISOUtil.hexdump 方法似乎返回传入数据的人类可读表示。您应该搜索相同的库或其他库,将 byte[] 转换为一个十六进制字符串。

这个问题的答案有一些不错的选择:How to convert a byte array to a hex string in Java?

详细说明:

您看到的三列输出是十六进制数据的传统表示形式:第一列是该行第一个字节的十六进制/二进制地址;第二列是数据本身,以十六进制表示,以空格分隔的字节表示;第三列显示行上字节的 ASCII 表示。其中一些(主要是 0x21 下方的字符)是不可打印的,因此在此表示中仅由一个点 (.) 表示。

这种检查二进制数据的方法在十六进制编辑器等实用程序中非常常见。确实有一个 POSIX/BSD 实用程序 hexdump,它显示了这种粗略的格式。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?