J8583 LLLLBIN и LLLLVAR дают результат заполнения разной длины
LLLLVAR и LLLLBIN выдают различную длину, полученную из одного и того же ввода.
Попытка передать значение "6832" в тот же объект IsoMessage, однако, LLLLVAR возвращает "00046382", а LLLLBIN возвращает "000836333832".
Пример исходного кода, как показано ниже:
msg.setValue(60, "6832".toByteArray(Charsets.US_ASCII), IsoType.LLLLBIN, 10)//encodes to 000836333832
msg.setValue(60, "6832", IsoType.LLLLVAR, 10) //encodes to 00046382
Хотя оба должны вернуть 0004, почему оба результата отличаются?
1 ответ
Когда вы кодируете сообщения ISO в виде текста, поля LxBIN кодируют свои данные в шестнадцатеричном формате, поэтому размер в два раза больше, чем вы ожидаете. Однако декодер декодирует шестнадцатеричные данные и выдает байтовый массив при разборе.
Поля LxVAR и LxBIN имеют одинаковую длину, когда все сообщение кодируется с использованием двоичного форматирования.