마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 파일 입출력 관련 질문

0 추천
RandomAccessFile 을 이용하여

seek 위치를 하여 파일 포인터를 옮겼는데요

 

해당 위치에 2바이트 형태의 자료가 하나 있습니다.

C에서는 WORD로 변수를 넣어 저장하였는데요

안드로이드에서는 2바이트면 short 으로 처리하면 되는지요?

 

또 2바이트의 자료에는 1비트마다 (총 16비트) 자료가 담겨져 있는데요

 

이걸 비트연산으로 하나씩 변수에다 저장할려면 어떻게 해야하나요

그리고 그 변수는 boolean으로 정해도 되는지요?
freekeno (260 포인트) 님이 2015년 1월 29일 질문

1개의 답변

0 추천
 
채택된 답변
걍 바이트로 사용하시면 되는거 아닐까요?

byte[] data = 읽은 데이터 2바이트...

이걸 예를들어 int 변수에 넣는다면...

int val = data[0] + (data[1]<<8); 뭐 이런식이면 되는거 아닐까요?

다음으로 비트와이즈는... 그냥 일반 비트연산자로 판단 가능하실꺼 가타요...

static final int MASK_1 = 1; // 첫 비트(1자리) 마스크...

static final int MASK_2 = 2;

static final int MASK_3 = 4;

이걸로...

boolean isThreeOn = val & MASK_3 != 0;

이렇게 하면 3번 비트가 1(On)인지 0(Off)인지 알수있을꺼 같은데요....
비애천사 (12,090 포인트) 님이 2015년 1월 29일 답변
freekeno님이 2015년 1월 29일 채택됨
안녕하세요 댓글 감사합니다. 초보라서 질문조금 더 할게요

int val = data[0] + (data[1]<<8); 이런식이면 되는거 아닐까요
위의 부분에 대한 설명좀 부탁드립니다. data[0]은 8비트 뒤에 8비트 해서 16비트를 int 형변수에 넣어두는건가요? 그럼 정수가 되나요?

mask_1 부분에서  설명이 조금만 해주시면 감사합니다. 비트 연산 1,2,4,8 인가요?
인터넷에 비트연산자 라고 검색하시면 &, |, !, <<, >> 이런 연산자들에 대한 정보는 얻으실 수 있을껍니다. 차례대로 and, or, not, shift 연산입니다.
int val = data[0] + (data[1]<<8);
이 줄의 의미는 예를 들어 십진수 15의 경우 1, 5 이렇게 나누어놓았을 경우 다시 원래대로 돌리려면 1을 십자리수로 만들어야 겠지요? 일자리에서 십자리로 만들기 위해 '<<' 쉬프트 연산을 한겁니다. 음 대충 이해가 되시려나요...

마지막으로 mask_1 은 말씀하신 2진수의 각 비트 weight 가 맞습니다.
쭈욱 나열하면 1, 2, 4, 8, 16, 32, 64, 128 이렇게 8개가 한 바이트를 처리하기위해 필요한 마스크가 되겠지요...
...