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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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