我尝试从带有strtol()的字符串中读取一个数字,并返回LONG_MAX数字,该数字应该在数字超出范围时返回,但我的数字不是那么大
main(){
char linea[30]={"110111010111111000000000"};
long num=strtol(linea,NULL,0);
printf("%s\n%X",linea,num);
}
实际结果:
110111010111111000000000个
7FFFFFFF
需要的结果:
110111010111111000000000个
DD7C00
答案 0 :(得分:5)
根据strtol的手册页,你给出的'0'参数意味着'使用你最好的判断',在这种情况下是十进制。如果您希望它转换二进制号码,作为您指定的“需要的结果”建议,请不要使用“0”,请使用“2”。
答案 1 :(得分:0)
可能是因为你传入了基数0
尝试:
int main(){
char linea[30] = {"110111010111111000000000"};
long num = strtol(linea, NULL, 10);
printf("%s\n%X", linea, num);
}
修改强>
显然,基数0是strtol
函数的特殊值:
如果base的值为0,则为主题序列的预期形式 是十进制常量,八进制常量或十六进制 常数,其中任何一个都可以以“+”或“ - ”符号开头。
所以我猜你可以使用0,抱歉让你怀疑。