리눅스 endian 8바이트 비트연산 질문합니다.
글쓴이: move01 / 작성시간: 수, 2008/09/24 - 2:17오후
안녕하세요.
리눅스(페도라 9)에서 8바이트(double형)엔디안 변환을 하려고 합니다.
double형 데이터를 받은 후 long long 타입 변수에 비트 연산을 위해 memcpy 한후
(Temp >> 56) & 0x00000000000000FFLL) ...등을 이용하여 엔디안 변환을 하려고 하는데요.
컴파일은 이상 없이 잘되지만 실행 파일이 예전 실행파일의 1/3가량 줄어들고 실제 실행 했을때
에러가 납니다. 전의 코드에서 long long 타입의 상수를 인식 못해 컴파일 에러가 났는데.
수정된 부분이 뒤에 LL <-이부분밖에 없기 때문에 여기서 에러가 난다고 생각 됩니다.
엔디안 변환을 수행하기에 비트연산이 괜찮다고 생각하는데. 8바이트 비트연산은 문제가 있네요.
long long 타입 말고는 gcc에서 인식하지 못하는것 같고 많은 조언 부탁드립니다.
Forums:
#include
혹은
후자를 애용합니다.
/usr/include/linux/byteorder/generic.h 를 읽어(!)보세요.
OTL
답글 감사
답글 감사 드립니다.
generic.h을 읽어 보았는데 잘 이해는 가지 않네요
2개의 해더 파일을 include하면 적어주신 4개의 함수를 사용할수 있는건가요 ?
제가 필요한건 Big Endian -> Little Endian으로 바꾸는 것인데요.
함수를 보아하니 데이터가 Temp일 경우
be{64}_to_cpu(Temp);
cpu_to_le{64}(Temp);
하게 된다면 자동적으로 convert 되는 것인가요 ? 제가 바르게 이해했는지 모르겠습니다.
댓글 달기