C 如何打印5字节整数值?

C 如何打印5字节整数值?,c,C,我刚开始读C,有一个关于宏的问题。 如何打印5字节整数值(恰好是在宏中定义的)? 例如: #define MAX 0xdeadbeaf12 int main(){ printf(" 0x %2x \n", MAX); } 此代码打印adbeaf12,但不打印死区F12 如何打印所有字节 #define MAX 0xdeadbeaf12LL 将告诉编译器使用最长的可用整数类型(然后在使用MAX的地方将其转换为适当的类型) 在大多数平台上,数字文字后缀LL将对应于signed long,在3

我刚开始读C,有一个关于宏的问题。
如何打印5字节整数值(恰好是在宏中定义的)? 例如:

#define MAX 0xdeadbeaf12
int main(){
printf(" 0x %2x \n", MAX);
}  
此代码打印adbeaf12,但不打印死区F12

如何打印所有字节

#define MAX 0xdeadbeaf12LL
将告诉编译器使用最长的可用整数类型(然后在使用
MAX
的地方将其转换为适当的类型)

在大多数平台上,数字文字后缀
LL
将对应于
signed long
,在32位系统上为64位(8字节)。C优秀的键入系统和编译器警告将为您解决其余问题

然后,您的
printf
需要使用
ll
修饰符:

printf(" 0x %2llx \n", MAX);

我更喜欢明确地假设变量的大小。下面使用标准(尽管经常未使用)宏定义64位常量,并将此类数量打印为十六进制值

#include <stdio.h>

// Pull in UINT64_C and PRIx64 macros
#include <inttypes.h>

// Make this a 64-bit literal value
#define MAX UINT64_C(0xdeadbeaf12)

int main()
{
    // Use PRIx64 which inserts the correct printf specifier for
    // a hex format of a 64-bit value
    printf(" 0x%" PRIx64 " \n", MAX);
}
#包括
//拉入UINT64_C和PRIx64宏
#包括
//将其设为64位文字值
#定义最大UINT64_C(0xdeadbeaf12)
int main()
{
//使用PRIx64插入正确的printf说明符
//64位值的十六进制格式
printf(“0x%”PRIx64“\n”,最大值);
}

如果不同时修复printf()格式字符串,这一切都是徒劳的。上面写着“打印一个无符号整数”;如果“unsigned int”为4字节,则不会打印更多。您可能很幸运,可以看到低阶4字节(在小型endian机器上);在big endian机器上,您将看到不同的值。在这两种类型的机器上,64位整数之后的参数对齐将完全不正确-这将导致问题。是的,这将是一个问题。但请注意,我使用了“大多数平台”。没有提供任何平台,我认为可能会使事情变得比必要的更复杂(OP中的明显错误是MAX被转换为4字节整数),这只会混淆问题。“最大宽度整数类型”是
intmax\u t/uintmax\u t
long long
不一定是C99标准§7.18.4.1中UINT64_C()可用的最长整数类型+1(和PRIx64,这与问题一致,但我会优先使用PRIx64)。为了原始海报的好处,PRIx64将打印小写十六进制数字,而PRIX64将打印大写。
PRIX64
不是
UINT64\u C()
的匹配说明符
PRIxLEAST64
是匹配的。“宏
UINTN\u C
(值)应扩展为与类型
uint\u leastN\u t
对应的整数常量表达式”您尚未接受4个问题中的任何一个。请复习