2014-11-03 1 views
0

java에서 이런 종류의 계산을 처음 사용합니다. 여기에 CAN에서 16 진수 값을 얻을 수있는 작업이 있습니다. CANId와 휠 속도, 엔진 속도 등의 매개 변수에 대한 값이 포함되어 있습니다.16 진수 값을 읽고 또한 비트 시작 비트 1.1부터 길이 16 비트까지 시작하는 값 부분을 읽는 방법?

CANId 값이 인 경우, 데이터, 여기 시작 비트 1.1에서 길이 16 비트까지 데이터를 읽으면 Wheel based vehicle speed이 표시됩니다. 어떻게 그렇게, 그래서 16 진수 값을 읽고 이해할 수 있지만 특정 비트에서 값을 가져 오지 오전.

import java.util.Scanner; 

public class NewClass { 

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    scan.nextInt(16); 
    int[] input = new int[10]; 
    for (int i = 0; i < 10; i++) { 
     //input[i] = scan.nextInt(16); 
     //System.out.println(input[i]); 
    } 
} 

}

+1

(시작 비트 1.1에서와 같이) 비트의 일부분이 무엇인지 확실하지 않습니다. 비트 11에서 시작한다는 뜻입니까? – Jason

+0

@Jason 아니요, 그 뜻은 시작일 때부터 시작 비트 (1 비트)입니다. – Raghu

답변

0

@Raghu 나는이 질문 here을 요구하고있다 생각합니다. 간단한 대답은 내가 제공 한 링크에 표시된대로 16 진수 문자열을 바이트로 변환하는 것입니다. 그런 다음 비트 단위 AND 연산을 사용하여 개별 비트 위치를 마스크 할 수 있습니다. 예를 들어 두 번째 비트를 오른쪽에서 분리하려면 숫자 2로이 비트를 마스크 할 수 있습니다. 왜?

1111 0110 (value) 
0000 0010 (mask) 
--------- 
0000 0010 (isolated bit) 

얻을 수있는 값이 마스크와 같으면 비트 위치가 어설트되고 (높은) 그렇지 않으면 비트 값이 낮습니다. Java에서 비트 AND 및 OR 연산자는 '&'이고 '|' 각기.

+0

감사하지만 두 번째 또는 세 번째 비트를 분리하여 멘토는 무엇입니까? .? – Raghu

+0

Byte [] b = Example.hexStringToByteArray ("0xCFF0021"); ' – Raghu

+0

으로 분리하면 예외가 발생합니다.'스레드의 예외 "main"java.lang.StringIndexOutOfBoundsException : 문자열 인덱스가 범위를 벗어남 : 7 " , 당신이 얻는 가치는 비트 또는 비트만을위한 것입니다. 또한,'byte [] b = Example.hexStringToByteArray ("CFF0021"); 대신 사용해보십시오. 'x'는 16 진수가 아님을 기억하십시오. – hfontanez