如何在Java中将字符串转换为bcd格式的字节数组?

时间:2020-02-11 09:30:13

标签: java bcd

我有下一个字符串:

String points = "210987654321";

然后我需要以bcd格式结束6字节数组,看起来像这样(相同数字):

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

我怎么到达那里? points.getBytes();不能满足我的需求。

1 个答案:

答案 0 :(得分:3)

根据您提供的代码及其预期输出,您似乎正在尝试转换为BCD格式(BCD是一个相当通用的定义),通常用于表示一个字符串,其中每个字母代表一个十六进制数字相应的字节表示形式(从注释到此答案:“打包的BCD”)。

StackOverflow中有一些解决方案,例如:

但是,出于“不重新发明轮子”的目的,我希望使用Apache Commons或Google Guava等库中的功能:

对于Apache Commons,它大致可以归结为以下代码:

byte[] result = Hex.decodeHex(points)

但是请注意,上面的代码还将接受包含不超过字母“ F”的字母的字符串作为输入,因此,如果您不接受,则必须确保您的字符串仅包含数字。 / p>


由于BCD包含许多变体,我相信值得一提的是,在应用BCD转换之前,您应该根据软件的用途确定要应用的特定转换。

例如,在金融/服务领域,转换为EBCDIC格式(http://ascii-table.com/ebcdic-table.php)以便与IBM系统进行交互是非常常见的。 在这种情况下,建议您检查以下StackOverflow问题及其相关答案:


最后,如果您确实要转换为另一种BCD格式,则可能已经根据管理特定BCD格式的规则编写了自己的代码。 当然,在开始编码之前,我仍然建议您寻找为您执行转换的库。