C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[40659] Re:혹시 이거 아시는분들 있을까요??
열씸! [cappuccino] 755 읽음    2005-06-20 21:34
두 분이 각각 배열과 메모리 복사, 쉬프트를 이용한 방법을 소개해 주셨군요.
저도 재미삼아 참여해 보았습니다.

리틀은 빅으로 빅은 리틀로 바꿔주되, 함수도 아닌것이, 쉬프팅도 않는것이, 메모리 복사도 필요없는것이
그럭저럭 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 매크로에
사용하시면 난리가 나죠 ^^ 알고 쓰면 아주 좋은 매크로... 겠지요.

+ -

관련 글 리스트
40629 혹시 이거 아시는분들 있을까요?? 고익재 776 2005/06/19
40660     답변 달아주신분들 감사합니다. 716 2005/06/20
40659     Re:혹시 이거 아시는분들 있을까요?? 열씸! 755 2005/06/20
40643     Re:혹시 이거 아시는분들 있을까요?? evergreen 724 2005/06/20
40631     Re:혹시 이거 아시는분들 있을까요?? smleelms 801 2005/06/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.