C 打印无符号短值

C 打印无符号短值,c,C,给出了输出a:4464何时应该是a:70000是否有更好的方法将ASCII转换为十进制?无符号空头的范围是0-65535你自己在回答这个问题。无符号短字符的范围是0-65535,因此70000不适合它(2个字节),请使用4个字节的数据类型(无符号int应该可以工作,您可以使用sizeof检查大小)。因为,您可能遇到了溢出问题 但是在回答关于输出无符号值的printf问题时,您需要u修饰符(用于“无符号”)。在这种情况下,正如Jens在下面指出的,您需要%hu: unsigned short

给出了输出
a:4464
何时应该是
a:70000
是否有更好的方法将ASCII转换为十进制?无符号空头的范围是0-65535

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

因为,您可能遇到了溢出问题

但是在回答关于输出无符号值的
printf
问题时,您需要
u
修饰符(用于“无符号”)。在这种情况下,正如Jens在下面指出的,您需要
%hu

  unsigned short a;
  char temp[] = "70000";
  a = atoi(temp);
  printf("a: %d\n", a);
…虽然只要
%u
unsigned int
,而不是
unsigned short
)可能也会起作用,因为
short
printf
的堆栈上推送时会升级为
int


但是,同样,只有当值70000适合您平台上的
无符号short

这是我的计算机科学作业,我们必须使用数据类型unsignedshort@mateo:嗯,你不能将70000放入2个字节,句号。如果作业要求你尝试,答案是“我不能,你也不能,老师”。如果你想让我们回答的话,请再读一遍,告诉我们确切的措辞。在这种情况下,你只能在两条未签名的短裤中储存70000英镑,但不能在一条短裤中储存70000英镑。听起来真奇怪。@Jens:谢谢。C标准中是否定义了
h
说明符?(不是C++,不是特定的编译器)我的回忆(这是生锈的)是,当代码被推到堆栈上时,代码<>代码>短代码>代码> >在VARARGS情况下,如代码> PRINTF。编辑:我从中得到了预期的输出(
426000042
),例如:
gcc-Wall
没有给我任何警告(gcc4.4.3)。但当然,这可能只是一些帮助我的东西,可能是特定于我的架构或编译器,等等:-)是的,它是C99。是的,如果
unsigned short
适合该参数,则将该参数提升为
int
,否则
unsigned int
。但这只是另一回事,格式说明符告诉
printf
如何解释它接收到的
int
printf("a: %hu\n", a);