#include<stdio.h>
main()
{
unsigned char val[8] = { 0x33, 0x22, 0x11, 0x00, 0x55, 0x66, 0x77, 0x88 };
printf("%llx\n", (unsigned long long int *) (&val[0]));
}
我试图打印一个8字节* 8的数组作为64位整数但得到一些垃圾值。有人可以帮忙。
答案 0 :(得分:3)
你做错了。
应该是这样的:
#include <inttypes.h>
#include <stdint.h>
printf("%" PRIu64, *(uint64_t *) val);
您希望取消引用(“跟随”)指向第一个字节的指针,该指针被解释为指向64位整数的指针,以便将64位整数传递给printf()
。
请注意&val[0]
与此上下文中的val
相同,所以为什么不保持简单。
答案 1 :(得分:2)
你想要
printf("%llx\n", *((unsigned long long int *) (&val[0])));
答案 2 :(得分:1)
实际上你打印地址(指针)的值。
您应该在打印前取消引用变量:
#include <stdio.h>
#include <stdint.h>
main ()
{
uint8_t val [8] = {0x33, 0x22, 0x11, 0x00, 0x55, 0x66, 0x77, 0x88};
printf ("%llx\n", * (uint64_t *) (val) );
}
根据 chux 的建议,最好使用保证大小的显式类型。
此外,数组的名称是它的第一个元素的指针,因此您可以简化代码并使用:
val
而不是:
&val[0]
答案 3 :(得分:0)
让它缺少基本指针算法。
#include<stdio.h>
main()
{
unsigned char val[8] = { 0x33, 0x22, 0x11, 0x00, 0x55, 0x66, 0x77, 0x88 };
printf("%llx\n", *(unsigned long long int *) (&val[0]));
}