|
두 분이 각각 배열과 메모리 복사, 쉬프트를 이용한 방법을 소개해 주셨군요.
저도 재미삼아 참여해 보았습니다.
리틀은 빅으로 빅은 리틀로 바꿔주되, 함수도 아닌것이, 쉬프팅도 않는것이, 메모리 복사도 필요없는것이
그럭저럭 printf 같은데 인수로 가져다 쓰기 쉽게 만들어 보았지요. 공용체를 이용한 방법입니다.
union{
int num;
char buf[4];
} LBCast;
#define LBCAST(c) (LBCast.buf[0] = (c)[3], LBCast.buf[1] = (c)[2], LBCast.buf[2] = (c)[1], LBCast.buf[3] = (c)[0], LBCast.num)
이상을 작성해 두고... 말씀하신 예제에는 이렇게 적용하시면 됩니다.
char cData[9] = {0x13,0x00,0x00f,0x42,0x67,0x00,0x25,0x00,0x3c};
printf("%d", LBCAST(cData + 1));
썩 괜찮지 않나요? ㅎㅎ
p.s. 물론 매크로 함수의 특성상... 매크로의 인자가 복수개로 확장될 때 Lvalue 형태로 사용되는 대입문을 괄호 안에 사용하면 안됩니다.
예를들어 cData++ 같은(여기선 cData가 배열인 상수 포인터라 어짜피 못 쓰지만) 인자를 LBCAST 매크로에
사용하시면 난리가 나죠 ^^ 알고 쓰면 아주 좋은 매크로... 겠지요.
|