Lecture fichier binaire

Résolu
SesechXP Messages postés 49 Date d'inscription jeudi 26 juin 2003 Statut Membre Dernière intervention 28 juillet 2006 - 21 avril 2006 à 15:47
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007 - 24 avril 2006 à 16:38
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

meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
21 avril 2006 à 18:55
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.
3
SesechXP Messages postés 49 Date d'inscription jeudi 26 juin 2003 Statut Membre Dernière intervention 28 juillet 2006
24 avril 2006 à 16:36
Salut !

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

++
0
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
24 avril 2006 à 16:38
Salut,

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

A plus tard.
0
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
24 avril 2006 à 16:38
Ah, c'est déjà fait, cool !
0
Rejoignez-nous