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

How to convert a string to byte array in bcd format in java?

我有下一个字符串:

String points = "210987654321";

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

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

我怎么去那里? points.getBytes(); 没有满足我的需求。

根据您提供的代码及其预期输出,您似乎正在尝试转换成 BCD 格式(BCD 是一个相当通用的定义),通常用于表示一个字符串,其中每个字母代表一个十六进制数字进入其相应的字节表示(从评论到这个答案:"packed BCD")。

Whosebug 中有解决方案,例如:

  • Convert a string representation of a hex dump to a byte array using Java?

但是,为了 "not reinventing the wheel",我更喜欢 Apache Commons 或 Google Guava 等库中提供的功能:

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

byte[] result = Hex.decodeHex(points)

但是需要注意的是,上面的代码将接受包含最大字母 "F" 的字符串作为输入,因此如果您不能接受,您将必须确保您的字符串仅包含数字。


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

例如,在 financial/services 部门,需要转换为 EBCDIC 格式 (http://ascii-table.com/ebcdic-table.php) 以与 IBM 系统交互是很常见的。 在这种情况下,我建议检查以下 Whosebug 问题及其相关答案:

  • Convert String from ASCII to EBCDIC in Java?

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