주소값 가지고 출력했다가 다시 포인터로 바꿨다가 ....저장했다가...계산했다가...하다가...

문자열변수에 0xFFDDEECC 가 저장되어있는데 이놈을 어떻게 정수형으로 (16진수로) 바꿀까 하다가 열심히 찾던 중 

후배놈이알려준 함수! 


strtoul, strtol 뭐 두개다 같은 기능이지만, 반환형이 다르다. 

ul은 보다시피 unsigned long이고 뒤에껀 그냥 long 형으로 반환!

개인적으로 써보니 0x2045f35d같은 값은 strtol로도 잘 변환되지만

음수형 16진수(0xFFFFEDF4 같은 것들)의 경우 값이 0x7FFFFFFF로 고정 반환이였다.

하여 이럴땐 strtoul을 사용하면 정상적인 값이 반환되는것을 볼수 있다.


사용은 간단하다. 자세한건 MSDN을 참조하면되겠지만.... 코드로 간단히 적으면

DWORD dwHexValue;

char* StringValue;

char* Error;

dwHexValue = strtol( StringValue, &Error, 16);

// 또는

dwHexValue = strtoul( StringValue, &Error, 16);

위와 같이 사용하면된다.

첫번째 인자값은 변환할 문자열!

두번째는 변환하다가 에러나면 에러난부분을 받아줄 변수인데 NULL로 넣어도 상관없다.

세번째는 진수!

dwHexValue = strtoul( StringValue, NULL, 16);

처럼 사용해도 된다.


Posted by Nvdark
,