안녕하세요. <div><br></div> <div>ETC1_RGB8_OES 형식의 이미지를 출력하는 프로그램을 공부하고 있는데요.</div> <div><br></div> <div>UINT64 형식으로 데이터를 읽어와서 사용하는 중에 이해가 되지 않는 부분이 있어서 글을 올립니다.</div> <div><br></div> <div>8 Bytes의 색상 데이터를 파일에서 읽어와서 변환을 해주는 작업 중에, </div> <div>이상하게도 비트 값이 서로 뒤바뀌어 나오는 것을 확인하였습니다.</div> <div><br></div> <div><br></div> <div><br></div> <div><div>int GetBit(UINT64 number, UINT64 bitswanted)</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>unsigned long long mask;<span class="Apple-tab-span" style="white-space:pre;"> </span>// 비트를 구하기위한 마스크, k번째 비트를 1로</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>unsigned long long masked_n;<span class="Apple-tab-span" style="white-space:pre;"> </span>// 비트 값, k번째 비트와 and 연산</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int bit;<span class="Apple-tab-span" style="white-space:pre;"> </span>// 첫번째 비트로 이동한 최종 결과 (자릿수)</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (bitswanted >= sizeof(UINT64)* 8)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return -1;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>else if (bitswanted < 0)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return -1;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>else</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>mask = 1i64 << bitswanted;<span class="Apple-tab-span" style="white-space:pre;"> </span>// i64 = 64bit임을 명시</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>masked_n = number & mask;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>bit = masked_n >> bitswanted;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return bit;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div>}</div></div> <div><br></div> <div>현재 저는 이런 형식의 비트 값을 받는 함수를 만들었습니다.</div> <div><br></div> <div><div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201503/1427514785hDgF7lpvyYEiz2n7NbGmRwmxIk.png" width="424" height="392" alt="q.PNG" style="border:none;"></div> <div style="text-align:left;"><br></div> <div style="text-align:left;">그림처럼 "80101026FFFF0000"의 데이터를 읽어오면 32비트의 값은 0, 33비트의 값은 1이 되어야 합니다.</div> <div style="text-align:left;"><br></div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201503/1427514785Jy9dFwAwcVhFLsaa3xQa1Y.png" width="544" height="743" alt="q2.PNG" style="border:none;"></div><br></div> <div>하지만 무슨 이유인지 프로그램 상에서는 다른 모든 비트는 맞게 나오지만 32비트와 33비트의 값이 뒤바뀌어 나옵니다.</div> <div>다른 비트의 값이 틀리게 나온다면 함수 자체를 의심할 터인데 32, 33 비트에서만 틀린 값이 나오니 의문입니다.</div> <div><br></div> <div><br></div> <div>왜 이런 일이 발생하나요? 정말 궁금합니다.</div> <div><br></div> <div>그럼, 좋은 하루 되세요!</div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div><br></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.