2009-04-06 7 views
0

중복 비교 : 나는 자바에 X 모뎀 프로토콜을 구현하고있어Compare hexadecimal and decimal values16 진수 값을 자바에게

, 나는 문자열로 그때 변환 한 데이터를하여 SerialPort를 읽고 크기가 1024 바이트 배열에 저장하고있어 I 패킷에서 133 바이트를 얻는다면 문제는 문자열의 16 진수 값과 bytearray를 비교할 수 없다는 것입니다. 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)); 
    } 
    } 
} 

감사 : 여기

는 thecode의 일부입니다.

+0

두 사람이 서식을 고정 시켰으며 서식을 지정하지 않고 수정 된 (?) 코드를 계속 붙여 넣어 작업을 망칠 수 있습니다. 당신은 텍스트 영역 위의 아이콘이 만들어지는 것을 시도하고 봐야한다. – PhiLho

답변

1

이진 데이터를 처리 할 때 String/char을 사용하지 마십시오. 대신 byte[]/byte을 사용하십시오. 다른 버그를 수정하기 전에 수정하십시오.

char은 Java에서 16 비트 값이며 C char (바이트로 정의 됨)과 동일하지 않습니다. Java에서 C char에 가장 가까운 것은 byte ('서명 됨')입니다.

1

문자열을 바이트와 비교합니다. Java가 주어진 바이트를 텍스트 표현으로 변환하는 데 사용되는 인코딩을 알지 못하기 때문에 이것은 잘못된 것입니다.

ByteBuffer를 사용하고 원시 바이트를 읽으면 비교합니다.