在C中使用atoi
我试图将char
数组数组转换为int
。尽管我的电话号码上有我的号码0
,但当我稍后打印此号码时,他们不会保留。atoi和前导0的十进制数
char num[] = "00905607";
int number;
number = atoi(num);
printf("%d", number);
从这个输出将是905607
,我想它是00905607
。
任何想法?
在C中使用atoi
我试图将char
数组数组转换为int
。尽管我的电话号码上有我的号码0
,但当我稍后打印此号码时,他们不会保留。atoi和前导0的十进制数
char num[] = "00905607";
int number;
number = atoi(num);
printf("%d", number);
从这个输出将是905607
,我想它是00905607
。
任何想法?
你可以使用sscanf,并提供'%d'作为你的格式字符串。
您可以在自己的printf()做填充,所以如果你想每一个输出为8个字符,你会用
printf("%08d", number);
使用strtol代替。它允许你指定基地。
如果你不想要那样的行为,不要使用atoi。
也许sscanf与%d格式?
如果代码正常工作,那么代码工作正常。整数是905607 ...在数学意义上不存在前导零。
这个代码有很多问题。您正在声明您的字符串不正确,并且您没有打印转换后的号码。另外,如果你在做printf(number);
,你需要使用格式字符串。如果你想在那里有前导空格,你可以使用宽度说明符。
是的,当你想要显示整数你必须再次格式化为字符串。整数只是一个数字,它不包含有关如何显示它的任何信息。幸运的是,printf函数已经包含了这个,所以这将是类似于
printf("%08d", num);
不要使用atoi。使用基数为10的strtol。
通常,没有理由在 现代代码中使用atoi。
大多数答案都假设你想要8位数字,但这并不完全符合你的要求。
如果你想保持前导零的数量,你可能更好的把它保存为一个字符串,并将其转换为strtol
进行计算。
您还可以计算字符串中的数字个数并创建一个具有前导零的新数字。
或者查看printf的所有奇妙格式标签,并使用一个填充零。 这里是很多人: http://www.cplusplus.com/reference/clibrary/cstdio/printf/
首先,不,它不;无论前导零是什么,atoi都转换成小数点。其次,你打印出原始字符数组,而不是转换后的数字。 – meagar 2011-01-14 19:17:08
你的编译器不能转换任何东西,尤其是不能转换成八进制。 – 2011-01-14 19:18:23