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
[73730] [답변] 자료형에 따른 포멧 지정자
정성훈.해미 [sage5nor] 4468 읽음    2016-07-13 13:12
안녕하세요.
정성훈.해미입니다.

첨부하신 사진에 나온 코드는 지극히 정상입니다.

long long의 경우
32비트/64비트 OS에 상관없이 무조건 8바이트(64비트)입니다.

소스상으로는 값도 정상으로 들어 갑니다.

그런데,
왜 결과가 다르게 나오냐~

결과 확인을 무엇으로 하셨나요??

대부분이 그렇듯
printf처럼 포멧지시자(%d, %X등등)를 이용해서 출력된 결과로 확인 할 것입니다.

결과를
printf("%016X", temp);
이렇게 사용하면
하위 4바이트만 재대로 나오고 상위 4바이트는 00으로 나옵니다.

일반적인 경우는 상관 없지만
특수한 경우에는 포멧 지시자에 약간 추가해야 재대로 나옵니다.

long의 경우가 그렇습니다.

long의 경우 l (영문자 엘)을
long long의 경우 ll (영문자 엘 2개) 을 추가하시면
정상적으로 데이터 전체가 출력됩니다.

printf("%016llX", temp);  // X앞에 ll (영문자 엘 2개)를 붙여서 써보세요.

8바이트 데이터가 그대로 잘 나올 것입니다.


*추신
long으로 쓰시지 마시고
long long으로 사용하세요.

long은
32비트 OS에서는 4바이트, 64비트OS에서는 8바이트입니다.

long long은
32비트, 64비트OS 모두 똑같은 8바이트입니다.


*참고: 32비트 -> 64비트로 바뀔때 변하는 것
  short 형은 16bit 를 유지.
  int 형은 32bit 를 유지.
  long 형은 32bit에서 64bit로 확장.
  long long 형은 64bit 를 유지.
  pointer 형은 32bit 에서 64bit로 확장.
  long double 형이 12bytes 에서 16bytes로 확장.
  size_t과 ssize_t 형이 32bit 에서 64bit 로 확장.





정태 님이 쓰신 글 :
: 안녕하세요. 볼포에서 항상 많은 도움을 받고 있는 사람입니다.
:
: 계측 장비 통신 프로그램을 만들다 보니 문제가 생겨 이렇게 글을 남깁니다.
:
: 계측장비에서 REAL 64 포맷으로 받다보니 16진수를 10진수로 변환 하는 코드 질문입니다.
:
: 첨부 파일에 보시면, sResult2 배열의 3,4,5,6,7,8,9,10 번째 배열 까지의 16진수를 10진수로 변환 하는 과정인데...
:
: 이상한 값이 나와서 이렇게 질문 드립니다.
:
: 혹,,, 답변을 달아 주신다면 감사하겠습니다....

+ -

관련 글 리스트
73726 진수 변환 코드 관련 질문 드립니다. 정태 4292 2016/07/12
73730     [답변] 자료형에 따른 포멧 지정자 정성훈.해미 4468 2016/07/13
73727     Re:진수 변환 코드 관련 질문 드립니다. 금목암[손효철] 4269 2016/07/12
73728         Re:Re:진수 변환 코드 관련 질문 드립니다. 정태 4387 2016/07/13
73729             Re:Re:Re:진수 변환 코드 관련 질문 드립니다. 금목암[손효철] 4737 2016/07/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.