Ваша проблема в том, что вы пытаетесь принять строковое значение распакованных кусочков, и это будут непечатные управляющие символы.
Рассматривайте упакованное число как байтовый массив для каждого байта:
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, еслиэто отрицательно, но я оставлю это как специальное упражнение для читателя.