unsigned short a;
char temp[] = "70000";
a = atoi(temp);
printf("a: %d\n", a);
Run Code Online (Sandbox Code Playgroud)
给a: 4464它输出应该是a: 70000什么有更好的方法从ASCII转换为小数?无符号短路的范围是0 - 65535
T.J*_*der 10
正如schnaader所说,你可能遇到了溢出问题.
但回答printf有关输出无符号值的问题,您需要u修饰符(对于"无符号").在这种情况下,正如Jens在下面指出的那样,你想要%hu:
printf("a: %hu\n", a);
Run Code Online (Sandbox Code Playgroud)
...虽然只是%u(unsigned int而不是unsigned short)可能也会起作用,因为当它被推到堆栈上时short会被提升到.intprintf
但同样,只有当70000的值适合unsigned short您的平台时才会这样.
你自己在回答这个问题.a的范围unsigned short是0-65535,因此70000不适合它(2个字节),使用4字节的数据类型(unsigned int应该工作,你可以检查大小sizeof).