Lecture fichier binaire

[Résolu]
Signaler
Messages postés
49
Date d'inscription
jeudi 26 juin 2003
Statut
Membre
Dernière intervention
28 juillet 2006
-
Messages postés
209
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
14 août 2007
-
Salut !

Je cherche à lire des données dans un fichier binaire afin de les réafficher en ascii.

Voici la tête du fichier à lire

@1000

4A 75 6C 69 65 6E FF FF FF FF FF FF FF FF FF FF

31 39 38 35 FF FF FF FF FF FF FF FF FF FF FF FF

voici mon code :

typedef struct file_lines
{
uint16_t address;
uint8_t hex_data[16];
char ascii_data[17];
}file_line_t;

void
firmware__format_data
(
char* input_file
){
file_line_t line[1000];

FILE* file_to_format;
file_to_format = fopen(input_file, "rb");

char buffer[64];

char *ptr;
uint16_t nb_line = 16;
uint8_t j = 0;

//Récupère l'adresse
fgets(buffer, sizeof (buffer), file_to_format);
ptr = strtok(buffer, "@");
sscanf(ptr, "%x", &line[0].address);
printf("Adresse de debut : 0x%x %u\n", line[0].address, line[0].address);

//lecture d'une ligne
while (fgets(buffer, sizeof (buffer), file_to_format) != NULL)
{
ptr = strtok(buffer, " ");
sscanf(ptr, "%x", &line[0].hex_data[j]);
printf("%c", line[0].hex_data[j]);
ptr = strtok(NULL, " ");
j++;
}
}

Et au final quand j'affiche line[0].hex_data ça m'affiche le premier caractère de chaque ligne et non chaque caractère de la ligne comme je l'attend...

Je ne vois pas ce qui ne va pas... Quelqu'un a une idée ?

++

4 réponses

Messages postés
209
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
14 août 2007

Salut,

Le même bout de code avec une petite correction (en rouge) :

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


typedef struct file_lines
{
uint16_t address;
uint8_t hex_data[16];
char ascii_data[17];
}
file_line_t;


void
firmware__format_data
(
char* input_file
)
{
file_line_t line[1000];
char* hex;


FILE* file_to_format;
file_to_format = fopen(input_file, "rb");


char buffer[64];


char *ptr;
uint16_t nb_line = 16;
uint8_t j = 0;


fgets(buffer, sizeof (buffer), file_to_format);
ptr = strtok(buffer, "@");
sscanf(ptr, "%x", &line[0].address);
printf("Adresse de debut : 0x%x %u\n", line[0].address, line[0].address);


while(fgets(buffer, sizeof (buffer), file_to_format)) {
hex = &buffer;
while (*hex != 0) {
char cCurrent;
sscanf(hex, "%02X", &cCurrent);
if (cCurrent != -1)
printf("%c", cCurrent);
hex+=3;


}
printf("\n");
}


}


int main(int argc, char* argv)
{
firmware__format_data("firmware.txt");
return(0);
}



C'est un peu déguelasse (pas de gestion d'erreur sur mon bout de code), mais j'espère t'avoir aidé un peu,
A plus tard.
Messages postés
49
Date d'inscription
jeudi 26 juin 2003
Statut
Membre
Dernière intervention
28 juillet 2006

Salut !

Merci beaucoup Meech ! Je n'ai pas repris tout à fait la même chose mais ça m'a beaucoup aidé.

++
Messages postés
209
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
14 août 2007

Salut,

Ben de rien, c'est le principe des forums... Si tu peux valider ma réponse

A plus tard.
Messages postés
209
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
14 août 2007

Ah, c'est déjà fait, cool !