【发布时间】:2019-11-03 15:08:35
【问题描述】:
我有一个非人类可读格式的 cobol 文件:它有 comp-3 格式的数据(数字),还有其他字符串和字符。我有转换 comp-3 格式的算法,但是当我将它应用于文件中的字节数组时,所有字符都被转换并且输出不是正确的。 考虑到 comp-3 数据和普通数据,我怎样才能正确解码整个文件?
我将从下面的文件中添加一些行以及我的 comp-3 算法:
Notepad++ 中的文件如下所示(第一行):
AH4820øêæÉ* 200 DBAG DBAG 0
AED S EUR AED S KAS°ê¤ 2 ø TN Øê¤ ð §É! SN ê¤
Notepad++ 中将 ASCII 转换为 HEX 的文件如下所示,尽管这不应该是正确的:
200F41483438323002C3B8C3AA01C3A6 01C3892A202020202020202020202020 20203230302044424147204442414720 30202020202020202020202020202020
public 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);
}
}
return unpackedData;
}
【问题讨论】:
-
我不会称它为“加密的” ;-) 你试过吗? sourceforge.net/projects/jrecord?也许这已经解决了您的问题,而无需重新发明轮子。
-
您发布的数据在我看来不像是有效的 COMP-3。文件是否已经进行了一些 EBCDIC->ASCII 转换?然后它已经坏得无法修复。您必须在任何代码页转换之前完成所有 COMP-3 字段的处理,并考虑到相应字帖中定义的记录布局。
-
这个问题是否已为您解答?如果是,请将任何对您有用的答案标记为“已接受”(并投票赞成任何有用的答案)。如果不澄清缺少什么,我们可以添加它。