2

我尝试使用 strtol() 从字符串中读取一个数字,它返回 LONG_MAX 数字,当数字超出范围时应该返回该数字,但我的数字不是那么大

main(){
    char linea[30]={"110111010111111000000000"};
    long num=strtol(linea,NULL,0);
    printf("%s\n%X",linea,num);
}

实际结果:
110111010111111000000000
7FFFFFFF

需要的结果:
110111010111111000000000
DD7C00

4

2 回答 2

5

根据 strtol 的手册页,您给出的 '0' 参数意味着“使用您的最佳判断”,在这种情况下是decimal。如果您希望它转换二进制数,正如您指定的“需要的结果”所建议的那样,不要使用“0”,使用“2”。

于 2012-06-01T03:13:12.847 回答
0

可能是因为你传入基数 0

尝试:

int main(){
    char linea[30] = {"110111010111111000000000"};
    long num       = strtol(linea, NULL, 10);
    printf("%s\n%X", linea, num);
}

编辑 显然 base 0 是该strtol函数的特殊值:

如果 base 的值为 0,则主题序列的预期形式是十进制常量、八进制常量或十六进制常量,其中任何一个都可以以“+”或“-”符号开头。

所以我猜你可以使用0,抱歉怀疑你。

于 2012-06-01T03:10:07.040 回答