打印未签名的短值

foo*_*foo 11 c

  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`,`%hu`是正确的说明符. (7认同)

sch*_*der 8

你自己在回答这个问题.a的范围unsigned short是0-65535,因此70000不适合它(2个字节),使用4字节的数据类型(unsigned int应该工作,你可以检查大小sizeof).

  • @mateo:嗯,你不能把70000装进2个字节,期间.如果家庭作业要求你尝试,答案是"我不能,你也不能,老师".但它可能没有,所以再读一遍,如果你想让我们回答,请告诉我们确切的措辞. (3认同)
  • 在这种情况下,您只能将70000存储在两个未签名的短路中,但不能存储在一个短路中.确实听起来很奇怪. (2认同)