【问题标题】:How to convert a Simple Java String to EBCDIC with packed decimal format如何将简单的 Java 字符串转换为压缩十进制格式的 EBCDIC
【发布时间】:2016-03-23 13:35:15
【问题描述】:

我必须将文件中的所有数据转换为压缩十进制格式的 EBCDIC。

文件中的所有数据都是简单的文本格式。

据我所知,我们需要先将 ASCII 转换为 EBCDIC Cp1047 或其他格式,然后应用“压缩十进制”逻辑/代码。(可能是我错了)

转换后的格式应该是“C3 C5 40 F0 C9 F8”(即EBCDIC压缩十进制格式)

【问题讨论】:

  • 如果不是直接运动...开始阅读格式文档...不太确定您从 SO 中寻找什么。也许只使用搜索 - 因为您可能无法使用像 bing.com/search?q=Java+String+to+EBCDIC 这样的搜索引擎,所以可能的结果是 stackoverflow.com/questions/368603/…
  • 您的文件有格式说明吗?您确切地知道 COMP-3 字段在哪里吗?如果您能提供示例行和描述,那就太好了
  • 您的示例不是压缩十进制;它几乎是分区十进制,其中最后一位(通常)或第一位(有时)——但中间没有一位——是Cx或Dx。 stackoverflow.com/a/10545291/2868801

标签: java string ebcdic packed-decimal


【解决方案1】:

压缩十进制(Cobol 中的 Comp3)

  • +123 存储为 x'123C'
  • -123 存储为 x'123D'
  • 无符号 123 是 x'123F'

您有 Cobol Copybook ???,如果有,请参阅 JRecord Question。 JRecord也有

  • Csv to Cobol 程序(使用 Cobol Copybook 将 Csv 文件转换为 Cobol)
  • Xml-to-Cobol 程序(使用 Cobol Copybook 将 Xml 文件转换为 Cobol)

JRecord 的替代品是

  • Cobol2J
  • legstar
  • 各种商业产品

注意:我是JRecord的作者


将数字转换为压缩十进制非常简单,并且有多种方法可以做到这一点

转换为字符串

一个选项是

  1. 将数字转换为字符串
  2. 将符号字符添加到字符串的末尾
  3. 将字符串转换为字节(十六进制字符串)

将整数转换为压缩十进制的 Java 代码

    String val = Integer.toString(Math.abs(value));
    if (value < 0) {
        val = val.substring(1) + "D"
    } else {
        val += "C";
    }

    byte[] bytes = (new BigInteger(val, BASE_16)).toByteArray();

类似问题

How to convert unpacked decimal back to COMP-3?

【讨论】:

  • 感谢您的回答,但我的文件还包含字符以及整数,例如“Hi N456 The End”,我想将此字符串转换为“C1 60 C1 4B F2 F5 F9 4B”等格式F5 F0 F0"。
  • 压缩十进制与任何东西有什么关系???;看看 OutputStreamWriter 类,特别是字符集参数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 2011-01-22
  • 1970-01-01
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多