我正在转换一个将 BCD 数据转换为 ASCII 的 Java 类
我正在将其转换为 .Net BCD 转换器
以下是从 java 转换的,但它给出了错误的转换值,例如 123456789 它给出了 123456153153
public static string GetStringFromBcd(int[] b)
{
StringBuilder buffer = new StringBuilder();
foreach (var t in b)
{
if ((t & 0x0000000F) == 0x0000000F && ((t >> 4) & 0x0000000F) == 0x0000000F)
{
break;
}
buffer.Append((t & 0x0000000F) + "");
if ((t & 0x000000F0) != 0x000000F0)
{
buffer.Append(((t >> 4) & 0x0000000F) + "");
}
}
}
可能是什么问题呢?
编辑: 答案:
我得到了数据已被 BCD 编码的源程序。我发现该逻辑没有任何问题,然后我发现了数据从网络流转换为字符串并随后转换为字节/整数数组的函数的来源。以下是代码
int bytesRead = tcpClient.Receive(message);//, 0, bytetoReadSize);
if (bytesRead == 0)
{
break;
//the client has disconnected from the server
}
//message has successfully been received
data += new ASCIIEncoding().GetString(message, 0, bytesRead);
这是问题 ASCIIEncoding 不转换许多编码字符并给出 '?'63 而不是那些字符,当将 63 放入 BCD 转换逻辑时,它给出 153。
为了解决这个错误,我修改了最后一行,而不是解码,我只是将接收到的字节转换为字符。
foreach (byte b in message)
{
data += ((char) b);
}