Lecture fichier + inversion endiannes
Bonsoir j'ai un petit soucis
je n'arrive pas à lire un fichier binaire avec des mots de 32bits
ensuite j'aimerai mettre la valeur trouvé en haxa dans la variable "Valeur1" et ensuite faire l'inversion d'andianne
voici ce que j'ai fais (après un prog de test l'inversion fonctionnerait)
mon main:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
int main (void)
{
int Valeur1;
int Valeur2;
int caracterActuel=0;
char *ptr,*ptr1;
ptr = (char*) &Valeur1;
Valeur1 = Fichier (caracterActuel);
printf("Apres inversion Valeur = %X%X%X%X\n", ptr[0], ptr[1], ptr[2], ptr[3]);
Valeur2 = Convert_Endianess(Valeur1);
ptr1 = (char*) &Valeur2;
printf("apres une nouvelle inversion Valeur = %X%X%X.%X\n", ptr1[0], ptr1[1], ptr1[2], ptr1[3]);
return 0;
} |
mon .h :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
// ---------- BIBLIOTHEQUE ------------- //
#include <stdio.h>
#include <stdlib.h>
// ---------- DECLARATION --------------//
#define DECALAGE_1OCTET 8
#define DECALAGE_2OCTETS 16
#define DECALAGE_3OCTETS 24
#define VALEUR_CHOISIE 0x12345678
#define TAILLE_MAX 100
// ----------- DECLARATION SOUS-PROG--------//
int Convert_Endianess(int valeur);
int Fichier (int caracterActuel); |
mon sous prog ouverture fichier :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
#include "stdafx.h"
#include "thales.h"
#include <stdio.h>
#include <stdlib.h>
int Fichier (int caracterActuel)
{
caracterActuel=0;
FILE* fichier;
fichier = fopen("File1.b0p", "r");
if (fichier != NULL)
{
caracterActuel = fgetc(fichier); // On initialise caractereActuel
// Boucle de lecture des caractères un à un
while (caracterActuel != EOF) // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
{
printf("Valeur 1 = %d\n", caracterActuel); // On affiche le caractère stocké dans caractereActuel
caracterActuel = fgetc(fichier); // On lit le caractère suivant
}
}
else
{
printf("Le fichier ne peux pas s'ouvrir\n");
}
fclose(fichier);
return caracterActuel;
} |
et enfin mon sous prog inversion andian
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
#include "stdafx.h"
#include "thales.h"
int Convert_Endianess(int valeur)
{
int Octet1, Octet2, Octet3, Octet4;
Octet1 = (valeur & 0x000000FF);
Octet2 = (valeur & 0x0000FF00) >> DECALAGE_1OCTET ;
Octet3 = (valeur & 0x00FF0000) >> DECALAGE_2OCTETS ;
Octet4 = (valeur & 0xFF000000) >> DECALAGE_3OCTETS ;
return((Octet1 <<24) | (Octet2 <<16) | (Octet3 <<8) | (Octet4));
} |
Je vous mets également ce qui vous permettra de compilé sur VS 6
StdAfx.cpp :
Code:
1 2 3 4 5 6 7 8 9
|
// stdafx.cpp : source file that includes just the standard includes
// thales.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
// TODO: reference any additional headers you need in STDAFX.H
// and not in this file |
ainsi que le point h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__AFCF6C05_596A_4658_B79B_A50618CD6ED6__INCLUDED_)
#define AFX_STDAFX_H__AFCF6C05_596A_4658_B79B_A50618CD6ED6__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// TODO: reference additional headers your program requires here
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__AFCF6C05_596A_4658_B79B_A50618CD6ED6__INCLUDED_) |
Voilà merci de m'aider donc enfaite pour résumé je n'arrive pas à lire un fichier binaire avec des mots de 32 bits et mettre la lecture dans "int Valeur1"
je vous fournis un programme qui compile mais qui n'affiche pas ce que je demande en gros il lit mal et j'aimerai que la lecture soit convertit en hexa et mise dans la variable "int variable 1"
voilà merci de m'aider
bonne soirée
Loïc