주소값 가지고 출력했다가 다시 포인터로 바꿨다가 ....저장했다가...계산했다가...하다가...
문자열변수에 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);
처럼 사용해도 된다.