unsigned short a;
char temp[] = "70000";
a = atoi(temp);
printf("a: %d\n", a);
给它输出a: 4464
什么时候它应该是a: 70000
有没有更好的方法将ASCII转换为小数?无符号短路的范围是0 - 65535
答案 0 :(得分:8)
你自己在回答这个问题。 unsigned short
的范围是0-65535,因此70000不适合它(2个字节),使用4字节的数据类型(unsigned int
应该有效,你可以用{检查大小} {1}})。
答案 1 :(得分:8)
作为schnaader said,您可能遇到了溢出问题。
但是,在回答有关输出无符号值的printf
问题时,您需要u
修饰符(对于“无符号”)。在这种情况下,正如Jens在下面指出的那样,您需要%hu
:
printf("a: %hu\n", a);
...虽然只有%u
(unsigned int
而不是unsigned short
)可能也会有效,因为short
会升级为int
当它被推到printf
的堆栈上时。
但是,只有当值70000适合您平台上的unsigned short
时,才会这样做。