Как распаковать файлы comp3 в читаемый формат?
У меня проблема при распаковке цифр comp3 в файл, извлеченный из устаревшей системы (основной фрейм). Я попробовал код, который был предоставлен другим членом @ переполнения стека @Jose Ventura, но он не работал. Я пытался распечатать распакованные данные, но ничего не печаталось. Я совершенно новичок в этой концепции (комп 3). Так что вы, ребята, можете помочь мне решить эту задачу
Ниже мой код
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.apache.commons.io.FileUtils;
public class TestComp3 {
private static String unpackData(byte[] packedData) {
int decimals = 2;
String unpackedData = "";
final int negativeSign = 13;
int lengthPack = packedData.length;
int numDigits = lengthPack * 2 - 1;
int raw = (packedData[lengthPack - 1] & 0xFF);
int firstDigit = (raw >> 4);
int secondDigit = (packedData[lengthPack - 1] & 0x0F);
boolean negative = (secondDigit == negativeSign);
int lastDigit = firstDigit;
for (int i = 0; i < lengthPack - 1; i++) {
raw = (packedData[i] & 0xFF);
firstDigit = (raw >> 4);
secondDigit = (packedData[i] & 0x0F);
unpackedData += String.valueOf(firstDigit);
unpackedData += String.valueOf(secondDigit);
}
unpackedData += String.valueOf(lastDigit);
if (decimals > 0) {
unpackedData = unpackedData.substring(0, numDigits - decimals) + "."
+ unpackedData.substring(numDigits - decimals);
}
if (negative) {
// System.out.println("unpacked data :-"+unpackedData);
System.out.println("-" + unpackedData);
return '-' + unpackedData;
}
System.out.println(unpackedData);
return unpackedData;
}
public static void main(String[] args) {
Path path = Paths.get("C:\\Users\\AV00499269\\Desktop\\Comp3 data file\\KYC.txt");
try {
byte[] data = Files.readAllBytes(path);
TestComp3.unpackData(data);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
0 ответов
Ваша проблема в том, что вы пытаетесь принять строковое значение распакованных кусочков, и это будут непечатные управляющие символы.
Рассматривайте ваше упакованное число как массив байтов для каждого байта:
int endValue = 0;
for (int I = 0, I< packed.length; I++) {
byte high = packed[I] & 0xF0;
byte low = packed[I] & 0x0F;
endValue = (endValue * 10) + (high * 10) + low;
}
System.out.println("The int value is: " + endValue)
В зависимости от исходной системы вам понадобится в особом случае откусить знак и умножить на -1, если он отрицательный, но я оставлю это как специальное упражнение для читателя.