Ответ 1
Это:
printf("%x", array);
скорее всего напечатает адрес первого элемента вашего массива в шестнадцатеричном формате. Я говорю "скорее всего", потому что поведение попытки напечатать адрес, как если бы оно было unsigned int
, было undefined. Если вы действительно хотите распечатать адрес, правильным способом сделать это будет:
printf("%p", (void*)array);
(В большинстве контекстов выражение массива неявно преобразуется в ( "decays" to) указатель на первый элемент массива.)
Если вы хотите напечатать каждый элемент вашего массива, вам нужно будет сделать это явно. Формат "%s"
принимает указатель на первый символ строки и сообщает printf
перебирать строку, печатая каждый символ. Нет формата, который делает такие вещи в шестнадцатеричном виде, поэтому вам придется делать это самостоятельно.
Например, данный:
unsigned char arr[8];
вы можете напечатать элемент 5 следующим образом:
printf("0x%x", arr[5]);
или, если вам нужен начальный ноль:
printf("0x%02x", arr[5]);
Формат "%x"
требует аргумента unsigned int
, а значение unsigned char
, которое вы передаете, неявно продвигается до unsigned int
, поэтому это корректно. Вы можете использовать "%x"
для печати шестнадцатеричных цифр a
через f
в нижнем регистре, "%x"
для верхнего регистра (вы использовали оба в вашем примере).
(Обратите внимание, что формат "0x%02x"
лучше всего работает, если байты составляют 8 бит, что не гарантируется, но это почти наверняка относится к любой системе, которую вы, вероятно, будете использовать.)
Я оставлю это вам, чтобы написать соответствующий цикл и решить, как разграничить вывод.