打印出值uint8_t *

时间:2015-08-11 08:51:31

标签: c

以下是我的摘要:

@saved_attachment = true

但是,如何打印出typedef struct{ uint8_t dstEndpt; uint16_t srcEndpt; uint8_t * quality; } DataIndT; DataIndT * dataIndPtr; printf("dstEndpt: 0x%02x", dataIndPtr->dstEndpt); <-- print out the value of dstEndpt printf("dstEndpt: 0x%04x", dataIndPtr->srcEndpt); <-- print out the value of srcEndpt 的价值?

4 个答案:

答案 0 :(得分:4)

  

但是,如何打印出质量值?

你做

printf("%p", (void*) dataIndPtr->quality);

这将打印地址,因为指针的值是指向指向的对象的地址。

要打印指针指向的对象,在这种情况下,您可以使用C99可用的格式说明符(还需要包含inttypes.h)。当然,您还需要取消引用指针:

printf("%" PRIu8 "\n", *(dataIndPtr->quality));

因为quality是指向uint8_t

的指针
printf("%" PRIu16 "\n", *(dataIndPtr->srcEndpt));

代表uint16_t类型。

答案 1 :(得分:3)

要打印指针的值,请使用%p

printf("dstEndpt: %p", (void*)dataIndPtr->quality); 

答案 2 :(得分:2)

quality是一个指针,或者像一个数组,如果你想打印指向你需要指定它的值。使用索引或取消引用它:

printf("quality: %d", *(dataIndPtr->quality));

使用零索引,如果它是一个数组,也应该打印值:

printf("quality: %d", dataIndPtr->quality[0]);

或者,如果您想要的是打印指针本身的值,那么Michal的回答就是您想要的。

答案 3 :(得分:1)

就像@Giorgi指出的那样,你可以使用 inttypes.h

这是一个小例子:

#include <inttypes.h>
#include<stdio.h>

int main(void){

    uint8_t a = 0;
    uint16_t b = 0;
    uint32_t c = 0;
    uint64_t d = 0;


    printf("%" PRId8 "\n", a);
    printf("%" PRIu16 "\n",b);
    printf("%" PRIu32 "\n", c);
    printf("%" PRIu64 "\n", d);

    return 0;
}