打印未签名的短值

时间:2011-02-27 17:45:42

标签: c

  unsigned short a;
  char temp[] = "70000";
  a = atoi(temp);
  printf("a: %d\n", a);

给它输出a: 4464什么时候它应该是a: 70000有没有更好的方法将ASCII转换为小数?无符号短路的范围是0 - 65535

2 个答案:

答案 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);

...虽然只有%uunsigned int而不是unsigned short)可能也会有效,因为short会升级为int当它被推到printf的堆栈上时。

但是,只有当值70000适合您平台上的unsigned short时,才会这样做。