Salut dans mon projet, je dois lire un fichier .bin qui contient des données de capteur sous la forme de short(16 bit values)
. Je fais cela en utilisant la fonction fread
dans un tampon, mais je pense que la lecture ne se produit pas correctement. Je veux dire il n'y a pas de cohérence entre ce que j'écris et ce que je lis. Pouvez-vous suggérer ce qui ne va pas ici? Ce n'est pas mon code de mon projet ... J'essaie seulement de vérifier les fonctions fread
et fwrite
ici.
#include<stdio.h>
void main()
{
FILE *fp = NULL;
short x[10] = {1,2,3,4,5,6,5000,6,-10,11};
short result[10];
fp=fopen("c:\\temp.bin", "wb");
if(fp != NULL)
{
fwrite(x, 2 /*sizeof(short)*/, 10 /*20/2*/, fp);
rewind(fp);
fread(result, 2 /*sizeof(short)*/, 10 /*20/2*/, fp);
}
else
exit(0);
printf("\nResult");
printf("\n%d",result[0]);
printf("\n%d",result[1]);
printf("\n%d",result[2]);
printf("\n%d",result[3]);
printf("\n%d",result[4]);
printf("\n%d",result[5]);
printf("\n%d",result[6]);
printf("\n%d",result[7]);
printf("\n%d",result[8]);
printf("\n%d",result[9]);
fclose(fp)
}
Après avoir fait le fread () (valeurs HEX):
temp.bin:
01 02 03 04 05 06 e1 8e 88 06 ef bf b6 0b...
Après avoir fait le fwrite ()
stdout:
Result
0
914
-28
-28714
-32557
1
512
-32557
908
914
Ouvrez le fichier avec le mode w+
(lire et écrire). Le code suivant fonctionne:
#include<stdio.h>
int main()
{
FILE *fp = NULL;
short x[10] = {1,2,3,4,5,6,5000,6,-10,11};
short result[10];
int i;
fp=fopen("temp.bin", "w+");
if(fp != NULL)
{
fwrite(x, sizeof(short), 10 /*20/2*/, fp);
rewind(fp);
fread(result, sizeof(short), 10 /*20/2*/, fp);
}
else
return 1;
printf("Result\n");
for (i = 0; i < 10; i++)
printf("%d = %d\n", i, (int)result[i]);
fclose(fp);
return 0;
}
Avec sortie:
Result
0 = 1
1 = 2
2 = 3
3 = 4
4 = 5
5 = 6
6 = 5000
7 = 6
8 = -10
9 = 11
Lorsque vous avez ouvert le fichier, vous avez oublié d'autoriser la lecture:
fp=fopen("c:\\temp.bin", "wb");
Devrait être:
fp=fopen("c:\\temp.bin", "w+b");