게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
질문) 데이터에서 비트를 구하는데 예상과 다른 결과를 보입니다.
게시물ID : programmer_8954짧은주소 복사하기
작성자 : 썽운
추천 : 0
조회수 : 2045회
댓글수 : 8개
등록시간 : 2015/03/28 12:56:45
옵션
  • 본인삭제금지
안녕하세요.

ETC1_RGB8_OES 형식의 이미지를 출력하는 프로그램을 공부하고 있는데요.

UINT64 형식으로 데이터를 읽어와서 사용하는 중에 이해가 되지 않는 부분이 있어서 글을 올립니다.

8 Bytes의 색상 데이터를 파일에서 읽어와서 변환을 해주는 작업 중에, 
이상하게도 비트 값이 서로 뒤바뀌어 나오는 것을 확인하였습니다.



int GetBit(UINT64 number, UINT64 bitswanted)
{
unsigned long long mask; // 비트를 구하기위한 마스크, k번째 비트를 1로
unsigned long long masked_n; // 비트 값, k번째 비트와 and 연산
int bit; // 첫번째 비트로 이동한 최종 결과 (자릿수)

if (bitswanted >= sizeof(UINT64)* 8)
return -1;

else if (bitswanted < 0)
return -1;

else
{
mask = 1i64 << bitswanted; // i64 = 64bit임을 명시
masked_n = number & mask;
bit = masked_n >> bitswanted;

return bit;
}
}

현재 저는 이런 형식의 비트 값을 받는 함수를 만들었습니다.

q.PNG

그림처럼 "80101026FFFF0000"의 데이터를 읽어오면 32비트의 값은 0, 33비트의 값은 1이 되어야 합니다.

q2.PNG

하지만 무슨 이유인지 프로그램 상에서는 다른 모든 비트는 맞게 나오지만 32비트와 33비트의 값이 뒤바뀌어 나옵니다.
다른 비트의 값이 틀리게 나온다면 함수 자체를 의심할 터인데 32, 33 비트에서만 틀린 값이 나오니 의문입니다.


왜 이런 일이 발생하나요? 정말 궁금합니다.

그럼, 좋은 하루 되세요!





전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호