Как распаковать файлы comp3 в читаемый формат? - PullRequest
0 голосов
/ 28 ноября 2018

У меня проблема при распаковке цифр 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();
            }

        }

    }

1 Ответ

0 голосов
/ 19 февраля 2019

Ваша проблема в том, что вы пытаетесь принять строковое значение распакованных кусочков, и это будут непечатные управляющие символы.

Рассматривайте упакованное число как байтовый массив для каждого байта:

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, еслиэто отрицательно, но я оставлю это как специальное упражнение для читателя.

...