gpt4 book ai didi

java - 无法在 java 中将 comp 3 解压为数字

转载 作者:行者123 更新时间:2023-12-02 01:46:22 27 4
gpt4 key购买 nike

我引用了网上的一段代码,将comp 3解压为java中的数字。我尝试将示例 comp3 文件传递​​给代码,但没有获得正确的解压数据。我得到了一些奇怪的数字。我对这个概念(comp 3)很陌生,所以你们能帮我解决这个问题吗?提前致谢

下面是我的代码

<小时/>
import java.math.BigInteger;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
* Converts between integer and an array of bytes in IBM mainframe packed
* decimal format. The number of bytes required to store an integer is (digits +
* 1) / 2. For example, a 7 digit number can be stored in 4 bytes. Each pair of
* digits is packed into the two nibbles of one byte. The last nibble contains
* the sign, 0F for positive and 0C for negative. For example 7654321 becomes
* 0x76 0x54 0x32 0x1F.
*
* This class is immutable. Once constructed you can extract the value as an
* int, an array of bytes but you cannot change the value. Someone should
* implement equals() and hashcode() to make this thing truly useful.
*/

public class PackedDecimalToComp {

public static void main(String[] args) {

try {
// test.unpackData(" 0x12345s");
Path path = Paths.get("C:\\Users\\AV00499269\\Desktop\\Comp3 data file\\Comp3Test.txt");
byte[] data = Files.readAllBytes(path);
PackedDecimalToComp test = new PackedDecimalToComp();
test.unpackData(data);
} catch (Exception ex) {
System.out.println("Exception is :" + ex.getMessage());
}
}

private static String unpackData(byte[] packedData) {
String unpackedData = "";

final int negativeSign = 13;
for (int currentCharIndex = 0; currentCharIndex < packedData.length; currentCharIndex++) {
byte firstDigit = (byte) ((packedData[currentCharIndex] >>> 4) & 0x0F);
byte secondDigit = (byte) (packedData[currentCharIndex] & 0x0F);
unpackedData += String.valueOf(firstDigit);
if (currentCharIndex == (packedData.length - 1)) {
if (secondDigit == negativeSign) {
unpackedData = "-" + unpackedData;
}
} else {
unpackedData += String.valueOf(secondDigit);
}
}
System.out.println("Unpackeddata is :" + unpackedData);

return unpackedData;
}
}
<小时/>

我传递的 Comp3 文件有值 x019F

转换后,我得到的解压数据为 783031394

最佳答案

您可以使用IBM Record Generator for Java ,一个免费工具。

这允许您生成一个表示 COBOL 或 PL/I DSECT 的 Java 类,然后您可以在自己的代码中使用该类来读取/写入大多数 COBOL 和 PL/I 数据类型的值。如果您不使用结构,那么您可以通过代码查看底层 JZOS 是如何工作的。类用于与数据类型交互。

虽然该工具是免费的,但它由 IBM 支持,因此如果您遇到问题,可以向 IBM 提出问题,他们会修复它。

关于java - 无法在 java 中将 comp 3 解压为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53645104/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com