Как распечатать значения из fread() в C

У меня есть данный простой фрагмент кода, который должен генерировать 128-битный ключ шифрования. Как вывести значения в консоль? Вот код:

#include <stdio.h>
#include <stdlib.h>

#define LEN 16 // 128 bits

void main()
{
    unsigned char *key = (unsigned char *) malloc(sizeof(unsigned char)*LEN);
    FILE* random = fopen("/dev/urandom", "r");
    fread(key, sizeof(unsigned char)*LEN, 1, random);
    fclose(random);
}

Чтобы быть более конкретным: в инструкции сказано: «Распечатайте числа».


person C0DeX    schedule 05.10.2019    source источник
comment
как printf("%hhx",key[i]) в цикле?.   -  person Jean-François Fabre    schedule 05.10.2019
comment
также sizeof(unsigned char) равно 1.   -  person Jean-François Fabre    schedule 05.10.2019
comment
... и вряд ли стоит использовать malloc для небольшого массива фиксированного размера: unsigned char key[LEN] ; было бы более подходящим. В любом случае приведение возвращаемого значения malloc не является ни необходимым, ни лучшей практикой в ​​C.   -  person Clifford    schedule 05.10.2019


Ответы (2)


Генерация удобочитаемых двоичных данных обычно включает hex или base64. Предполагая, что шестнадцатеричный код является приемлемым:

for (int i=0 ; i<LEN ; i++ ) {
   printf("%02x", key[i]) ;
} ;
printf("\n") ;
person dash-o    schedule 05.10.2019

Самый обычный метод «удобочитаемого» представления двоичных данных состоит в использовании шестнадцатеричного представления, где каждая цифра представляет 4 бита.

for( int b = 0; b < len; b++ ) 
{
    printf( "%2.2X ", (int)key[b] ) ;
}
person Clifford    schedule 05.10.2019