[英]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.