Как преобразовать строку в байтовый массив в формате bcd в java? - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть следующая строка:

String points = "210987654321";

, и мне нужно оказаться в 6-байтовом массиве в формате bcd, который выглядит следующим образом (те же цифры):

byte [] result = { 0x21, 0x09, (byte) 0x87, 0x65, 0x43, 0x21 };

Как туда попасть? points.getBytes(); дает не то, что мне нужно.

1 Ответ

3 голосов
/ 11 февраля 2020

Исходя из предоставленного вами кода и ожидаемого результата, похоже, что вы пытаетесь преобразовать его в формат BCD (довольно обобщенное определение c), обычно используемое для представления строки, в которой каждая буква представляет HEX di git в соответствующее ему байтовое представление (из комментариев к этому ответу: "упакованный BCD").

В StackOverflow есть решения, такие как:

Однако в интересах "не изобретать велосипед" я бы предпочел функциональность, доступную в библиотеках например Apache Commons или Google Guava:

Для Apache Commons сводится примерно к этому коду:

byte[] result = Hex.decodeHex(points)

Следует отметить, однако, что приведенный выше код будет принимать в качестве входных данных также строки, содержащие буквы вплоть до буквы "F", так что если это не приемлемо для вас, йо вам нужно будет убедиться, что ваша строка содержит только числа.


Поскольку BCD включает в себя несколько вариантов, я считаю, что стоит упомянуть, что перед применением преобразования BCD вы должны определить, какие именно преобразования c Вы хотите подать заявку в соответствии с целями вашего программного обеспечения.

Например, в секторе финансов / услуг очень распространена необходимость преобразования в формат EBCDI C (http://ascii-table.com/ebcdic-table.php ) взаимодействовать с системами IBM. В таком случае я рекомендую проверить следующий вопрос StackOverflow и связанные с ним ответы:


Наконец, если вы действительно имели в виду преобразование в другой формат BCD, возможно, вам придется написать собственный код, основанный на правилах, определяющих указанный вами формат c BCD. Конечно, прежде чем приступить к написанию кода, я все же рекомендую поискать библиотеки, выполняющие преобразование для вас.

...