问题描述
|
以下代码段:
unsigned char * get_id(unsigned char *buffer)
{
unsigned int i;
for(i=0; i<8;i++)
buffer[i] = read_byte(); // Returns uint8_t
return buffer;
}
最后,我有一个64位ID。我想调用get_id()并使用printf打印返回值(ID)。我怎么做?
我的解决方案是:
unsigned char tmp_buf[8];
unsigned char *ptr;
ptr = get_id(tmp_buf);
printf(\"ID = %02x %02x %02x %02x %02x %02x %02x %02x\\n\",ptr[7],ptr[6],ptr[5]...);
那真是太糟糕了,我不太喜欢它,但是如何在“一个”小printf语句中打印它呢?
解决方法
只需将其打印为64位整数即可。您甚至不需要字节交换任何内容。
#include <assert.h>
#include <inttypes.h>
#include <stdint.h>
union {
uint8_t buf[8];
uint64_t val;
} buffer;
uint8_t *ptr = get_id(buffer.buf);
assert(ptr && \"should get id\");
printf(\"ID = %\"PRIx64\"\\n\",buffer.val);