如何将未压缩的十进制数转换回 COMP-3?

Kri*_*r N 5 c# java cobol packed-decimal

我问了一个关于转换 COMP 字段的问题,我没有得到任何答案。

我希望堆栈溢出可以帮助我解决这个问题。

我成功地将 COMP-3 转换为十进制。我需要您的帮助,使用任何高级编程语言,但最好使用 Java 或 c#.net,将解压缩的十进制数转换回 COMP-3。

Bru*_*tin 3

在压缩十进制中 -123 表示为 X'123d'(最后一个字节 c、d 或 f 是符号)。处理压缩十进制最简单的方法之一是简单地将字节转换为十六进制字符串(或根据需要反之亦然),然后使用正常的字符串操作。这可能不是最有效的,但很容易实现。

因此,将整数(值)转换为压缩十进制大致是(注意:我还没有测试代码)

String sign = "c";
if (value < 0) {
    sign = "d";
    value = -1 * value;
}
String val = value + "d"

byte[] comp3Bytes = new BigInteger(val, 16).toByteArray();
Run Code Online (Sandbox Code Playgroud)

以下是一些用于转换为 comp3 或从 comp3 转换的示例代码 要从字节数组中检索压缩十进制,请参阅http://record-editor.svn.sourceforge.net/viewvc/record-editor/Source/JRecord/src中的 getMainframePackedDecimal 方法/net/sf/JRecord/Common/Conversion.java?revision=3&view=markup

并设置压缩十进制,请参阅http://record-editor.svn.sourceforge.net/viewvc/record-editor/Source/JRecord/src/net/sf/JRecord/Types/TypePackedDecimal.java?revision=3&view中的 setField =标记

这两个例程都采用字节数组、起始位置和字段位置的长度。

网上还有其他这样做的示例(我认为 JRanch 也有用于执行转换的代码),请进行一些谷歌搜索。