使用printf将int转换为char

使用printf将int转换为char,c,printf,c99,C,Printf,C99,我只是想知道下面是否是将int转换为char的正确方法 #include <stdio.h> int main() { int x = 500; printf("%hhd\n", x); } 另外,从上面看,我想知道是否应该执行以下操作来显示字符的值 #include <stdio.h> int main() { char c = 'a'; printf("%hhd\n", c); } 或者只打印f%d\n,c;没事吧?因此,基本上,我试图

我只是想知道下面是否是将int转换为char的正确方法

#include <stdio.h>

int main()
{
   int x = 500;
   printf("%hhd\n", x);
}
另外,从上面看,我想知道是否应该执行以下操作来显示字符的值

#include <stdio.h>

int main()
{
   char c = 'a';
   printf("%hhd\n", c);
}
或者只打印f%d\n,c;没事吧?因此,基本上,我试图通过printf输出整数的第一个字节,而不进行任何转换。

在第一个示例中使用%hhd强制符合C99的printf在打印之前将传递的int转换为char。根据您的字符是有符号还是无符号,您可能会看到244或-12作为打印的值。这是否是印刷它的“正确”方式仍有争议;很可能不是。打印字符的常规方法是使用%c。一个问题是500应该代表什么样的角色;在几乎所有的char、有符号char或无符号char类型平台上,其值都超出范围。如果是Unicode字符或其他宽字符值,则可能需要使用宽字符格式变量-wprintf

使用%c格式和纯字符值“a”的第二个示例表现良好且常规。这将打印字母“a”。如果您使用%hhd,它也会工作,通常会打印97。您必须在一台不寻常的计算机上才能获得不同的值

#include <stdio.h>

int main()
{
   int x = 500;
   printf("%hhu\n", x);
}
这将打印244

500=00000001 11110100


244=11110100

@Johathan:我不想用%c打印字符,但要打印整数的第一个字节的值。@user963241 x&0xFF?还是比特屏蔽也被禁止了?@DanielFischer:是的,这是一种方法。我想知道是否可以使用printf来处理转换。哪个是“整数的第一个字节”?它是MSB最高有效字节、LSB最低有效字节,还是取决于整数中最低地址的硬件字节的endianness?%hhd格式将打印LSB,而不考虑尾数。虽然这是可行的,但通常最好明确代码的意图。我通常被鼓励使用显式转换,而不是让printf自动处理格式转换。