Bonjour,
J'ai un petit problème avec la fonction fwrite.
Je voudrais écrire dans un fichier en binaire donc en "wb" un tableau de short de size variable.

Donc cela donne ca:
fwrite(signal_Output,sizeof(short),n,FTestOutput);

Et le problème c'est que cela fonctionne avec certain fichier mais avec d'autre cela ne fonctionne pas vraiment. Je m'explique quand j'exécute mon programme après l'enregistrement et une fois le programme fini je remarque que les données ne sont pas bonnes dans le fichier (ouvert avec notepad++).
Au lieu de coder sur 2 octets (taille d'un short) il le code sur 3 j'ai l'impression.

Est ce que quelqu'un à déjà eu ce soucis?

Voici mon code entier sinon.
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR cmdline, int Show)
{
	char *signal_Input;
	short *signal_Output;
	FILE *FTestInput;		// Variable de type File servant à l'ouverture et à la lecture du fichier
	FILE *FTestOutput;
	char *Nom_fichier;
	Nom_fichier=(char*)malloc(200*sizeof(char));
	int size_fichier_temp;
	short long_name_fich=0;
	char *Nom_Fichier_Out;
	Nom_Fichier_Out=(char*)malloc(200*sizeof(char));
	int i;
	int j;
	int k;
	int n=0;
	int a;
	int nb_data=0;
	int val_temp=0;
	int diez_temp=0;
	char temp_signal[7];
 
	union Config_AM2P TC_Word;			//Structure to know the AM2P configuration
	short q=0;		//Loop variable
	short end_array=0;	//Last data to deconcatenate
	short indice_1=0;		//Index n°1 of deconcatenate data 
	short indice_2=0;		//Index n°2 of deconcatenate data 
	short indice_3=0;		//Index n°3 of deconcatenate data 
	short shift_start=0;	//Shift of the start depending on the satellite mode and the AM2P configuration
 
	int escap=browse_tdx(Nom_fichier);
	if(escap==0) return 0;
	signal_Output=(short*)malloc(516096*sizeof(short));
	for(i=0; i<516096; i++)
	{
		signal_Output[i]=0;
	}
 
	FTestInput=fopen(Nom_fichier,"r"); //Chargement du fichier rentré précedement
 
	fseek(FTestInput,0,SEEK_END);
	size_fichier_temp=ftell(FTestInput);
	fseek(FTestInput,0,SEEK_SET);
 
	signal_Input=(char*)malloc(size_fichier_temp*sizeof(char)); // taille du balayage complet charger depuis le fichier
 
	if(FTestInput==NULL)
	{	MessageBox(0,"Erreur de lecture du fichier","Erreur",MB_ICONERROR);
		return 0;}
	while(i!=NULL)
		i=(int)fread(signal_Input,sizeof(char),size_fichier_temp,FTestInput); // Stockage des données dans une variable intermédiaire.
	if(FTestInput==NULL||ferror (FTestInput))
	{	MessageBox(0,"Erreur de lecture du fichier","Erreur",MB_ICONERROR);
		return 0;}
	k=0;
	n=0;
	for(j=0; j<size_fichier_temp; j++)
	{
	//	
		k=0;
		for(i=0;i<7;i++)
		{	temp_signal[i]=0;}
 
		if(signal_Input[j] == 0x23)
		{	while(signal_Input[j] != 0x0a)
				{ j++;
				size_fichier_temp--;}
		}
		else
		{
			if(signal_Input[j] == 0x2d)
			{	a=-1;
				j++;
			}
			else
			{	a=1;}
			while(signal_Input[j] != 0x0a )
			{
				temp_signal[k]=signal_Input[j];
				if(k>7)
				{
					sprintf(Nom_Fichier_Out,"%d",k);				
					MessageBox(NULL,(LPCSTR)Nom_Fichier_Out,"",MB_OK);
				}
				k++;
				j++;
			}
			int nb_ligne=nb_ligne2;	//Variable pour indique le numero de la ligne à laquelle nous voulons commencer
			int lenght_ligne=0;	//Longeur de la chaine de caractere indiquant le nombre de ligne
			lenght_ligne=(int)strlen(temp_signal);	//initialisation de la longueur de la chaine
			int puissance=lenght_ligne-1;	//Puissance est égale à le longueur de la ligne -1
			int val_compt=0;	//Variable indiquant le code ASCII du nombre dans la chaine de caractere
			for(i=0; i<lenght_ligne; i++)
			{	val_compt=(int)temp_signal[i];	//Stockage de la valeur du nombre en ASCII ( par exemple le caractere'1'=49 en int)
				nb_ligne=nb_ligne + (int)(pow((double)10,puissance)*Table_ASCII[val_compt-48]);// Transcription de la valeur du caractere en sa valeur reelle
				puissance--;}		//puis multiplication par 10puissance de l'indice de notre caractere et sommation des valeurs obtenu
			signal_Output[n]=a*nb_ligne;
			if(lenght_ligne!=0)
			{	n++;}
			nb_ligne2=0;
 
		}
	}
	////////////////////////////////////////////////////////////////////////////////////////
 
 
	for(i=0;i<200;i++)
	{	Nom_Fichier_Out[i]=0;}
	long_name_fich = strlen(Nom_fichier);
	strncpy(Nom_Fichier_Out,Nom_fichier,long_name_fich-4);
	strcat(Nom_Fichier_Out,"_Convert.tdx");
	FTestOutput=fopen(Nom_Fichier_Out,"wb");
	fwrite(signal_Output,sizeof(short),n,FTestOutput);
	fclose(FTestOutput);
 
	for(i=0;i<200;i++)
	{	Nom_Fichier_Out[i]=0;}
	long_name_fich = strlen(Nom_fichier);
	strncpy(Nom_Fichier_Out,Nom_fichier,long_name_fich-4);
	strcat(Nom_Fichier_Out,"_Convert_texte.txt");
	FTestOutput=fopen(Nom_Fichier_Out,"w");
	fwrite(signal_Input,sizeof(char),size_fichier_temp,FTestOutput);
	fclose(FTestOutput);
 
	MessageBox(NULL,"Transcript Terminée","Transipt",MB_OK);
 
 
}