CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ 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중에 하나도 역시 마찬가지

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.