1

如我所见,OSS Nokalva Java api 支持 BCD 编码(ByteTool 类有方法 toBCD 和 parseBCD),但不支持 TBCD。有谁知道如何处理它?或者有谁知道如何在 Java 中实现从 String 到 TBCD 编码的字节数组的转换,反之亦然?预先感谢。

4

2 回答 2

1

OSS Nokalva 在其知识库中有关于 TBCD 的问答。请查看http://www.oss.com/asn1/knowledge-center/asn1-java/209.html以获取可以下载以处理 TBCD 的示例。

请注意,此处较早的答案具有不正确的代码,该代码依赖于在一般情况下不适用于 TBCD 的现有 ByteTool BCD 方法。该代码将 TBCD 处理为带有半字节交换的 BCD。当有效的 TBCD 不是有效的 BCD 时,ByteTool BCD 代码将抛出 NumberFormatException。有关正确处理 TBCD 的代码,请参见上面的 URL。

保罗

于 2012-02-09T19:28:58.830 回答
0

我会回答自己。为了实现以字符串格式给出的十进制数的TBCD编码和解码,我做了以下方法:

此方法反转字节的高低 4 位。

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

接受输入十进制字符串并返回 TBCD 编码字节数组的方法。该方法使用来自OSS Nokalva java api的ByteTool类的方法parseBCD。

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);
}
于 2012-02-06T09:04:35.863 回答