Поддержка Tbcd в OSS Nokalva - PullRequest
       1

Поддержка Tbcd в OSS Nokalva

1 голос
/ 03 февраля 2012

Как я вижу, OSS Nokalva Java API имеет поддержку кодирования BCD (класс ByteTool имеет методы toBCD и parseBCD), но не поддерживает TBCD. Кто-нибудь знает, как с этим бороться? Или кто-нибудь знает, как реализовать в Java преобразование из String в байтовый массив, закодированный в TBCD, и наоборот? Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

OSS У Нокальвы есть вопрос и ответ в Базе знаний о TBCD. Пожалуйста, посмотрите на http://www.oss.com/asn1/knowledge-center/asn1-java/209.html пример, который вы можете скачать для обработки TBCD.

Обратите внимание, что более ранний ответ здесь содержит неправильный код, который опирается на существующие методы BCD ByteTool, которые в общем случае не работают с TBCD. Этот код обрабатывает TBCD как BCD с заменой полубайтов. Код BCD ByteTool будет генерировать исключение NumberFormatException для действительного TBCD, если оно не является действительным BCD. См. URL-адрес выше для кода, который правильно обрабатывает TBCD.

Пол

0 голосов
/ 06 февраля 2012

Я отвечу про себя. Чтобы реализовать кодирование и декодирование TBCD десятичного числа, заданного в формате String, я сделал следующие методы:

Этот метод инвертирует верхний и младший 4 бита байта.

private byte reverseByte(byte bInput){
   return (byte) ((byte)((bInput & (byte)0x0f)<<4) + (byte)((bInput &(byte)0xf0)>>>4)&0x0f));
}

Метод, который принимает входную десятичную строку и возвращает кодированный байтовый массив TBCD. Этот метод использует метод parseBCD из класса ByteTool OSS Nokalva Java API.

public static byte[] parseTBCD(String input){
byte[] tbcd = ByteTool.parseBCD(input);
for(int i=0; i<tbcd.length; i++) tbcd[i] = reverseByte(tbcd[i]);
return tbcd;
}

И метод, который принимает байтовый массив TBCD и преобразует его в строковое десятичное число.

public static String toTBCD(byte[] tbcd){
for(int i=0; i<tbcd.length; i++) tbcd[i] = reverseByte(tbcd[i]);
return ByteTool.toBCD(tbcd);
}
...