小编jpm*_*muc的帖子

将十六进制字符串转换为long

我试图在32位机器上进行十六进制到整数转换.这是我正在测试的代码,

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;
  }
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

 strtol = 2147483647 /* = 0x7fffffff -> overflow!! */
 sscanf = 1 /* nevermind */
 atol = 0   /* nevermind …
Run Code Online (Sandbox Code Playgroud)

c hex integer-overflow type-conversion strtol

2
推荐指数
1
解决办法
7180
查看次数

标签 统计

c ×1

hex ×1

integer-overflow ×1

strtol ×1

type-conversion ×1