比较十六进制值java

时间:2009-04-06 10:46:32

标签: java serial-port core xmodem

重复: Compare hexadecimal and decimal values

我正在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));
    }
  }
}

提前致谢。

2 个答案:

答案 0 :(得分:1)

处理二进制数据时,请勿使用String / char。请改用byte[] / byte。在尝试修复任何其他错误之前修复它。

char是Java中的16位值,它与C char(定义为字节)不同。 Java中与C char最接近的是byte(已签名,但是)。

答案 1 :(得分:1)

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

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