2015-01-14 4 views
0

현재 콜백을 통해 Windows 드라이버와 상호 작용하는 작은 응용 프로그램을 작성하고 있습니다. 이 응용 프로그램은 정수로 표현되는 다양한 XY 좌표와 버튼 상태를 기록합니다. 응용 프로그램은이 데이터를 로컬 네트워크를 통해 콜백으로 보냅니다. 패킷에 대한 내 경험은 최소한으로 제한되어 있지만 적어도 바이트 배열로 값을 변환해야한다는 것을 알고 있습니다.정수 배열을 바이트 배열로 변환

는 예를 들어, 아래 배열의 두 가지이다 :

int[][] axes = { {75, 150}, {0, 40} }; 

int[] buttons= {0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1} 

내가 바이트 배열로이 값을 변환하는 방법에 대한 갈 것이라고 정확히 어떻게? 또한 오프셋을 사용하면 어떤 도움이됩니까? 나는 주변을 둘러 보았고 나는 그 주위에 머리를 터뜨릴 수 없다.

+0

모든 대답은 모든 정수에 대해 4 비트를 사용하는 것을 고려합니다 (1 바이트를 사용하여 변환 할 수 있다고하더라도). 값이 작은 정수가 많이있는 경우 최상위 비트에서 비트 코딩을 사용하여 다른 솔루션을 체크 아웃하고 싶지만 지금은 쓸 수있는 충분한 시간이 없습니다. 저녁에 그걸 알기 원한다면 내가 올리겠습니다. – NitroNbg

+0

@NitroNbg 알아낼 수있었습니다. 그래도 도움을 주셔서 감사합니다! – Raggeth

답변

2

int를 byte []로 변환합니다. 함수 각 셀 호출하여 INT []에 루프

byte[] toBytes(int i) 
{ 
    byte[] result = new byte[4]; 

    result[0] = (byte) (i >> 24); 
    result[1] = (byte) (i >> 16); 
    result[2] = (byte) (i >> 8); 
    result[3] = (byte) (i /*>> 0*/); 

    return result; 
} 

실행 바이트의 배열에 따라서 추가 :이 함수를 생성 .

1

배열의 모든 요소를 ​​루프 처리 한 다음 각 정수 하나씩 바이트를 추출해야합니다. 정수가 4 바이트라고 가정하면 비트 시프 팅 연산을 사용하고 정수에서 8 비트를 추출 할 수 있습니다. 그런 다음 바이트 데이터 형식을 사용하여 배열을 만들 수 있습니다.

예컨대 A = 10,110,011 11,101,010 11,110,101 11,010,100 // 이진

 byte 3 byte 2 byte 1 byte 0 

바이트 0은 &가 0xFF =

바이트 = 1 (a >> 8) & 0xFF를

바이트 = 2 (a >> 16) & 0xFF를

바이트 = 3 (a >> 24)은 0xFF &

intege는 다시 변환하려면 바이트 어레이 내의 4 바이트의 각각의 세트에 대해, r, 바이트 배열 내의 각각의 4 바이트 세트에 대해 :

숫자 = (바이트 3 < < 24) | (바이트 2 < < 16) | (바이트 1 < < 8) | byte0

+1

True이고 다시 정수로 다시 컴파일하는 것은'int originalInt = byte0 | (바이트 1 << 8) | (바이트 2 << 16) | (바이트 3 << 24) – NitroNbg

관련 문제