Выполнить 2 проходит через файл.
1 Сканируйте и подсчитайте необходимые байты.
2 Выделите необходимую память, затем повторите сканирование, на этот раз сохраняя результаты.
size_t ReadHexFile(FILE *inf, unsigned char *dest) {
size_t count = 0;
int n;
if (dest == NULL) {
unsigned char OneByte;
while ((n = fscanf(inf, "%hhx", &OneByte)) == 1) {
count++;
}
}
else {
while ((n = fscanf(inf, "%hhx", dest)) == 1) {
dest++;
}
}
if (n != EOF) {
; // handle syntax error
}
return count;
}
#include <stdio.h>
int main() {
FILE *inf = fopen("hex.txt", "rt");
size_t n = ReadHexFile(inf, NULL);
rewind(inf);
unsigned char *hex = malloc(n);
ReadHexFile(inf, hex);
// do somehting with hex
fclose(inf);
free(hex);
return 0;
}