#c
#c
Вопрос:
Следующий фрагмент кода:
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-разрядный идентификатор. Я хотел бы вызвать get_id() и напечатать возвращаемое значение (ID) с помощью printf. Как мне это сделать?
Мое решение таково:
unsigned char tmp_buf[8];
unsigned char *ptr;
ptr = get_id(tmp_buf);
printf("ID = x x x x x x x xn", ptr[7], ptr[6], ptr[5]...);
Это довольно ужасно, и мне это не очень нравится, но как напечатать это в «одном» маленьком printf-операторе?
Комментарии:
1. Почему бы просто не использовать цикл?
2. почему бы не написать функцию print_id (беззнаковый символ * буфер), содержащую ваш printf?
Ответ №1:
Просто выведите это как 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 amp;amp; "should get id");
printf("ID = %"PRIx64"n", buffer.val);