簡體   English   中英

比較十六進制值java

[英]compare hexadecimal values java

重復: 比較十六進制和十進制值

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

提前致謝。

處理二進制數據時不要使用String / char 使用byte[] / byte代替。 在嘗試修復任何其他錯誤之前,請先解決此問題。

char是Java中的16位值,它與C char (定義為字節)不同。 在Java中,最接近C char的是byte (有符號,盡管)。

您正在將字節與字符串進行比較-這是一件壞事,因為您不知道Java正在使用哪種編碼將給定字節轉換為文本表示形式。

使用ByteBuffer並在讀取原始字節之間進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM