Une utilisation de base de fread
vérifiera le retour par rapport au nombre d'octets attendus pour valider que vous lisez ce que vous avez l'intention de lire. La sauvegarde du retour vous permet également de gérer les lectures partielles.
L'exemple suivant lit un minimum de 16 octets à la fois du fichier donné comme premier argument (ou stdin
par défaut si aucun fichier est donné) dans buf
et sorties chaque valeur à stdout
en hexadécimal format.
#include <stdio.h>
#define BUFSZ 16
int main (int argc, char **argv) {
unsigned char buf[BUFSZ] = {0};
size_t bytes = 0, i, readsz = sizeof buf;
FILE *fp = argc > 1 ? fopen (argv[1], "rb") : stdin;
if (!fp) {
fprintf (stderr, "error: file open failed '%s'.\n", argv[1]);
return 1;
}
/* read/output BUFSZ bytes at a time */
while ((bytes = fread (buf, sizeof *buf, readsz, fp)) == readsz) {
for (i = 0; i < readsz; i++)
printf (" 0x%02x", buf[i]);
putchar ('\n');
}
for (i = 0; i < bytes; i++) /* output final partial buf */
printf (" 0x%02x", buf[i]);
putchar ('\n');
if (fp != stdin)
fclose (fp);
return 0;
}
(Remarque: bytes == readsz
uniquement lorsque le paramètre size
à fread
est 1
Le rendement est le nombre de items
lecture et chaque article est seulement égale à 1
pour char
valeurs de type.)
Exemple d'utilisation/Sortie
$ echo "A quick brown fox jumps over the lazy dog" | ./bin/fread_write_hex
0x41 0x20 0x71 0x75 0x69 0x63 0x6b 0x20 0x62 0x72 0x6f 0x77 0x6e 0x20 0x66 0x6f
0x78 0x20 0x6a 0x75 0x6d 0x70 0x73 0x20 0x6f 0x76 0x65 0x72 0x20 0x74 0x68 0x65
0x20 0x6c 0x61 0x7a 0x79 0x20 0x64 0x6f 0x67 0x0a
Examinez l'exemple et faites-moi savoir si y Vous avez des questions
Vous essayez de lire * binaire *, puis de l'imprimer en utilisant un spécificateur de format * chaîne *. Quelle sortie attendez-vous si les données binaires commencent par un octet nul ou si les octets sont toutes des valeurs non imprimables?Ou que se passe-t-il si ces octets * ne contiennent pas de terminateur nul pour dire 'printf' où il s'arrête? –
L'itération de votre tableau et l'impression de chaque valeur du tableau en tant que nombre devraient vous aider à voir ce qui se trouve dans le tableau car il n'interprétera pas les caractères ASCII étendus ou restreints, mais les valeurs entières. – callyalater
Quel est le contenu actuel du fichier? Pouvez-vous poster un extrait? –