0

复制: 比较十六进制和十进制值

我在java中实现x-modem协议,我正在读取串行端口并存储在大小为1024的字节数组中。然后我将数据转换为字符串我在一个数据包中得到133个字节,问题是我无法启用比较字符串和字节数组中的十六进制值。我必须在数据中找到 SOH 0x01,EOT=0x02,但我无法理解如何去做。

这是代码的一部分:

char SOH=0X01;
public void readResponse() 
{
  byte[] buffer = new byte[1024];
  int len = -1;
  String data;
  try 
  {
    while ((len = this.getIn().read(buffer)) > -1) 
  {
  data = new String(buffer,0,len);
  time = System.currentTimeMillis();
  data = new String(buffer, 0, len);
  System.out.println("Data length is "+data.length());
  System.out.println(data);
  for(int i=0;i<carray.length;i++)
  {
    if(data.CharAt(i)==SOH)
    {
      System.out.println("SOH["+i+"]"+data.CharAt(i));
    }
  }
}

提前致谢。

4

2 回答 2

1

处理二进制数据时不要使用String/ 。char使用byte[]/byte代替。在尝试修复任何其他错误之前修复它。

char是Java中的16位值,它与C char(定义为字节)不同。char在 Java 中最接近 C的是byte(虽然是有符号的)。

于 2009-04-06T10:55:48.087 回答
1

您正在将字节与字符串进行比较 - 这是一件坏事,因为您不知道 Java 使用什么编码将给定的字节转换为文本表示。

使用 ByteBuffer 并在读取原始字节时进行比较。

于 2009-04-06T11:05:42.307 回答