32 비트 컴퓨터에서 16 진수에서 정수로 변환하려고합니다.16 진수 문자열을 long으로 변환하십시오.
strtol = 2147483647 /* = 0x7fffffff -> overflow!! */
sscanf = 1 /* nevermind */
atol = 0 /* nevermind */
보시다시피, 나는 (나는 또한 errno를 확인) 오버 플로우를 얻을 strtol 함수와 함께, 비록 내가 것 : 여기에 테스트입니다 코드는, 내가 무엇을 얻을
int main(int argc,char **argv)
{
char *hexstring = "0xffff1234";
long int n;
fprintf(stdout, "Conversion results of string: %s\n", hexstring);
n = strtol(hexstring, (char**)0, 0); /* same as base = 16 */
fprintf(stdout, "strtol = %ld\n", n);
n = sscanf(hexstring, "%x", &n);
fprintf(stdout, "sscanf = %ld\n", n);
n = atol(hexstring);
fprintf(stdout, "atol = %ld\n", n);
fgetc(stdin);
return 0;
}
이
가된다 0xffff1234가 유효한 정수 32 비트 값이므로 아무 것도 일어나지 않을 것으로 예상하십시오. 나는 어느 쪽이든 예상 할 것이다 4294906420 또는 그 밖의 -60876나는 무엇을 놓치고 있습니까?
기본 숫자를 0으로 설정하는 것이 확실한가요? 16 * strtol (hexstring, (char **) 0, 0) * strtol (hexstring, (char **) 0, * * 16 **) * –
@AG 밑수를 0으로 설정하면 'strtol'은 기본 16, 10 또는 8을 사용할지를 입력 문자열의 시작 부분에서 알아 내기 시작합니다. –
오른쪽, 잊어 버렸습니다! 감사 ! –