[ CnUnix ] in KIDS 글 쓴 이(By): Nameless (One) 날 짜 (Date): 2006년 8월 24일 목요일 오후 11시 10분 12초 제 목(Title): Re: Endian Problem.. 일단 '가능할까요?'에 대한 답은.... 제 생각엔 '아니오' 그래도 이런정도 수정이면 되지싶은데.. (코드를 보아하니 l[0] 이 LS Word, l[1]이 MS Word(헉!)같군요 ) #ifndef _BYTE_ORDER #define _BYTE_ORDER YOUR BYTE ORDER #endif typedef union { unsigned long l[2]; #if _BYTE_ORDER == _BIG_ENDIAN #define T_64_l0 l[1] #define T_64_l1 l[0] #elif _BYTE_ORDER == _LITTLE_ENDIAN #define T_64_l0 l[0] #define T_64_l1 l[1] #else #error "merong" #endif unsigned long long ll; }T_64; 모든 소스에서 (compile error를 각오하고) '.l[0]' 이라는 문자열을 '.T_64_l0'로 '.l[1]' 이라는 문자열을 '.T_64_l1'으로 변경 --------- 제가 더 좋아하는 형태는 이렇게 union { struct { #if _BYTE_ORDER == _BIG_ENDIAN unsigned long l_b0; unsigned long l_b1; #elif _BYTE_ORDER == _LITTLE_ENDIAN unsigned long l_b1; unsigned long l_b0; #else #error "merong" #endif } l; #define l_b0 l.l_b0 #define l_b1 l.l_b1 unsigned long long ll; }T_64; 모든 소스에서 (compile error를 각오하고) '.l[0]' 이라는 문자열을 '.l_b1'로 <- 0/1에 주의 '.l[1]' 이라는 문자열을 '.l_b0'으로 변경 ------------------ (파일 변환작업 공임 치킨 1마리로 서비스 가능) @이래서 변수명은 긴게 좋다는...나중에 재처리에 오류확률이 적으니 @_BYTE_ORDER macro에 표준이 있냐하면.... 없어보입니다. (확인해보지 않았습니다. 제 POSIX책에는 없어보이지만) 그러나 보통 __BYTE_ORDER나 _BYTE_ORDER중에 하나는 먹더군요 __BIG_ENDIAN과 _BIG_ENDIAN중에 하나도 역시 마찬가지 |