打印字符数组为64位整数

时间:2014-06-10 17:47:35

标签: c char integer

#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位整数但得到一些垃圾值。有人可以帮忙。

4 个答案:

答案 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]));
}