안녕하세요.
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;
}
}
현재 저는 이런 형식의 비트 값을 받는 함수를 만들었습니다.
그림처럼 "80101026FFFF0000"의 데이터를 읽어오면 32비트의 값은 0, 33비트의 값은 1이 되어야 합니다.
하지만 무슨 이유인지 프로그램 상에서는 다른 모든 비트는 맞게 나오지만 32비트와 33비트의 값이 뒤바뀌어 나옵니다.
다른 비트의 값이 틀리게 나온다면 함수 자체를 의심할 터인데 32, 33 비트에서만 틀린 값이 나오니 의문입니다.
왜 이런 일이 발생하나요? 정말 궁금합니다.
그럼, 좋은 하루 되세요!