无法将所有8个字节装入unsigned long long中

rov*_*red 1 c hex

我试图在视觉C中将16个十六进制值拟合为一个无符号的long long long

unsigned long long test = 0x1A2A00DABABA7890;
printf("long long value %X\n", test);
printf("%d", sizeof(test));
Run Code Online (Sandbox Code Playgroud)

我的输出显示它是8个字节,但仅在输出时存储前4个字节

long long value BABA7890
8
Run Code Online (Sandbox Code Playgroud)

我是不是误会了它的工作原理?谢谢你的帮助。

Car*_*rum 5

您的printf格式说明符与您的类型不匹配,这会导致未定义的行为。尝试:

printf("long long value %llX\n", test);
Run Code Online (Sandbox Code Playgroud)

%dsizeof结果的格式也是错误的。您应该在%zu那里使用。

如果您打开一些警告设置(clang例如,默认情况下会这样做),编译器可能会警告您:

example.c:6:30: warning: format specifies type 'unsigned int' but the argument
      has type 'unsigned long long' [-Wformat]
    printf("long long value %X\n", test);
                            ~^     ~~~~
                            %llX
example.c:7:14: warning: format specifies type 'int' but the argument has type
      'unsigned long' [-Wformat]
    printf("%d", sizeof(test));
            ~^   ~~~~~~~~~~~~
            %ld
2 warnings generated.
Run Code Online (Sandbox Code Playgroud)

编辑:我注意到在您的问题中,您正在使用VisualC。这 %z是C99功能,编译器可能不支持。在这种情况下,您应该查看文档以查看使用正确的格式。