|
안녕하세요.
정성훈.해미입니다.
첨부하신 사진에 나온 코드는 지극히 정상입니다.
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진수로 변환 하는 과정인데...
:
: 이상한 값이 나와서 이렇게 질문 드립니다.
:
: 혹,,, 답변을 달아 주신다면 감사하겠습니다....
|