64bit 10진수->16진수 16진수 -> 10진수

글쓴이: 익명 사용자 / 작성시간: 수, 2017/06/28 - 10:36오전
char ch; __int64 decVal = 0; char* szHex = new char[16]; printf("HexToDec2 %I64d\n", decVal); sprintf(szHex, "%X", decVal); printf("val = 0s%" PRIx64 "\n", szHex); __int64 n3 = _strtoi64(szHex, NULL, 16); printf("%I64d\n", n3);
위에서 decVal 은 __int64로 선언된 변수인데요 여기엔 64비트 크기의 정수가 담겨 있습니다.
sprintf(szHex, "%X", decVal);
를 통해서 szHex 문자열에 10진수 -> 16진수로 변환해서 저장을 하면
잘됩니다 그런데
이 szHex 변수를 이용해서
__int64 n3 = _strtoi64(szHex, NULL, 16);
n3에 저장하려 하면 게속 32bit로 변환되서 저장이 됩니다;;;
그래서 한번
szHex ="153DFDF6F10";
저장해서
__int64 n3 = _strtoi64(szHex, NULL, 16);
돌려보면 또 잘나오구요;;; 왜이러죠???
Forums:
에고;; C++입니다!
에고;; C++입니다! 언어를 안써놨네요
해결했습니다;;; 하지만.....
다른 개체에서 저 정수를 불러오면 이상하게 게속 32 BIT로 변환되서 받아서
한번 다른 개체 쪽에서 값을 받을때 그 값을 직빵으로
__int64 addr = _strtoi64(직방으로 정수받기, NULL, 16);
넣어주니 이상하게 64bit 로 잘 저장 되네요;;;
_strtoi64() 는 null 문자로 끝난
_strtoi64() 는 null 문자로 끝난 문자열을 처리합니다.
char* szHex = new char[17];
로 바꾸시고 sprintf(szHex, "%X\0", decVal); 로 해보세요.
출처 : http://www.cplusplus.com
출처 : http://www.cplusplus.com/reference/cstdio/printf/
A format specifier follows this prototype: [see compatibility note below]
%[flags][width][.precision][length]specifier
sprintf(szHex, "%X", decVal)를 sprintf(szHex, "%llX", decVal) 이런식으로 변경해주시면 될 것 같습니다.
(%llX에서 ll은 long long int(__int64)를 알려주는 length이고, X는 16진수 형식으로 받아들이겠다는 specifier라고 보시면 될 것 같습니다.)
본문에는 llx를 대신해서 PRIx64 을 사용했는데
본문에는 llx를 대신해서 PRIx64 을 사용했는데...
용법이 좀 잘못되어 있군요.
sprintf를 할때 PRIx64 를 사용하면 되겠네요.
물론 szHex 사이즈도 늘리구요. (16+1)
오 그렇군요. 좋은 내용 알아갑니다.
오 그렇군요. 좋은 내용 알아갑니다.
댓글 달기