java - 比较十六进制值java

标签 java serial-port core xmodem

重复: Compare hexadecimal and decimal values

我正在java中实现x-modem协议(protocol),我正在读取串行端口并存储在大小为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));
    }
  }
}

提前致谢。

最佳答案

处理二进制数据时不要使用String/char。请改用byte[]/byte。在尝试修复任何其他错误之前先解决这个问题。

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

关于java - 比较十六进制值java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/720932/

相关文章:

java - 如何在不同的 java IDE 中保持一组 ant 构建脚本的更新?

java - 通过 GSM 调制解调器播放 WAV 文件

linux - 避免在核心文件中转储信息

java - 在java 8中按多个字段名分组

java - 对 JAXB 对象的 XPath 1.0 查询?

java - 是否有工具可以为 Eclipse 中的 Maven 项目提供动态代码覆盖率?

linux - 当前的 Linux 内核调试技术

c++ - Arduino - 将拆分字符串与另一个字符串进行比较

c - Linux 串口 : Blocking Read with Timeout

java - 字符串是 Java 中的对象,那我们为什么不使用 'new' 来创建它们呢?