Одиночные символы идентификатора в строку

#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);