如何将简单Java字符串转换为压缩十进制格式的EBCDIC

如何将简单Java字符串转换为压缩十进制格式的EBCDIC,java,string,ebcdic,packed-decimal,Java,String,Ebcdic,Packed Decimal,我必须将文件中的所有数据转换为压缩十进制格式的EBCDIC 文件中的所有数据都是简单的文本格式 据我所知,我们需要先将ASCII转换为EBCDIC Cp1047或其他格式,然后应用“压缩十进制”逻辑/代码。(可能是我错了) 转换后的格式应类似于“C3 C5 40 F0 C9 F8”(即EBCDIC压缩十进制格式)压缩十进制(Cobol中的Comp3) +123存储为x'123C' -123存储为x'123D' 无符号123是x'123F' 您是否有一本Cobol文案?,如果有,请参阅。 J

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

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

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

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

压缩十进制(Cobol中的Comp3)

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

您是否有一本Cobol文案?,如果有,请参阅。 JRecord也有

  • 程序(使用Cobol Copybook将Csv文件转换为Cobol)
  • 程序(使用Cobol Copybook将Xml文件转换为Cobol)
JRecord的替代方案包括

  • Cobol2J
  • legstar
  • 各种商业产品
注意:我是JRecord的作者


将一个数字转换成压缩十进制非常简单,有很多方法可以实现

转换为字符串 一个选择是

  • 将数字转换为字符串
  • 将符号字符添加到字符串的末尾
  • 将字符串转换为字节(十六进制字符串)
  • 将整数转换为压缩十进制的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();
    
    String val=Integer.toString(Math.abs(value));
    如果(值<0){
    val=val.substring(1)+“D”
    }否则{
    val+=“C”;
    }
    字节[]字节=(新的BigInteger(val,BASE_16)).toByteArray();
    

    类似问题

    如果它不是直接运动的。。。开始阅读格式文档。。。不太确定你在找什么。也许只是使用搜索-因为你可能无法使用搜索引擎,就像这里可能的结果一样,你有你的文件格式描述吗?您知道COMP-3字段的确切位置吗?如果你能提供一行示例和描述,那就太好了。你的示例不是压缩小数;它几乎是十进制的,其中最后一个数字(通常)或第一个数字(有时)——但中间没有一个——是CX或DX。谢谢你的回答,但我的文件也包含字符和整数,比如“Hi N456 the End”,这个字符串我想转换成“C1 60 C1 4B F2 F5 F9 4B F5 F0 F0”格式。压缩十进制和什么有关系???;查看OutputStreamWriter类,特别是characterset参数