32ビットマシンで16進数から整数への変換を行おうとしています。これが私がテストしているコードです、
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;
}
これは私が得るものです:
strtol = 2147483647 /* = 0x7fffffff -> overflow!! */
sscanf = 1 /* nevermind */
atol = 0 /* nevermind */
ご覧のとおり、strtolを使用すると、オーバーフローが発生します(errnoでも確認しました)が、0xffff1234は有効な整数の32ビット値であるため、何も起こらないと思います。私は4294906420または-60876のいずれかを期待します
私は何が欠けていますか?