Maintenant que vous avez changé votre question, laissez-moi en poser une. Quel est le format du fichier que vous essayez de lire?
Pour un fichier binaire il y a des changements nécessaires que vous ouvrez le fichier:
/* C way */
FILE *fp = fopen("text.bin", "rb"); /* note the b; this is a compound mode */
/* C++ way */
std::ifstream ifs("test.txt", ios::in | ios::binary);
lecture dans le contenu est facile. Mais rappelez-vous, votre fichier a 2 nombres entiers au début - largeur, hauteur qui déterminent combien de plus à lire, c'est-à-dire une autre largeur * hauteur nombre d'entiers. Donc, votre meilleur pari est de lire les deux premiers entiers en premier. Vous devrez utiliser deux tampons - un pour la largeur et la hauteur et ensuite en fonction de leur valeur un autre pour lire le reste du fichier. Ainsi, Lisons dans les deux premiers entiers:
char buf[ 2 * sizeof(int) ]; /* will store width and height */
Lire dans les deux entiers:
/* C way */
fread(buf, sizeof(int), 2, fp); /* the syntax changes, FILE pointer is last */
/* C++ way*/
ifs.read(buf, sizeof buf);
Maintenant, la partie la plus délicate. Vous devez convertir les choses en double. Cela dépend également de l'endianness de votre système - si une simple affectation fonctionne ou si un échange d'octets est nécessaire. Comme une autre affiche a souligné WriteInt()
écrit entiers dans le format big-endian. Déterminez le système sur lequel vous êtes. Et puis vous pouvez aller plus loin.
FILE
est une structure de données C.Il est inclus dans C++ pour la compatibilité C. Vous pouvez le faire:
/* The C way */
#include <stdio.h>
#include <stdlib.h>
int main(void) {
FILE *fp = fopen("test.txt", "r");
int i = 0;
if (fp) {
fscanf(fp, "%d", &i);
fclose(fp);
}
printf("%d\n", i);
}
Vous pouvez utiliser la chose std::ifstream
pour ouvrir un fichier pour la lecture. Vous devez lire le contenu en utilisant une autre incantation pour lire le contenu du fichier et en extraire vous-même les informations souhaitées.
/* The C++ way */
#include <fstream>
#include <iostream>
int main() {
std::ifstream ifs("test.txt");
int i = 0;
if (ifs.good()) {
ifs >> i;
}
std::cout << i << std::endl;
}
Notez que vous pouvez utiliser les fonctions de style C en C++ et, bien que ce soit la moins recommandée:
/* The C way in C++ */
#include <cstdio>
#include <cstdlib>
int main() {
using namespace std;
FILE *fp = fopen("test.txt", "r");
int i = 0;
if (fp) {
fscanf(fp, "%d", &i);
fclose(fp);
}
printf("%d\n", i);
}
[Note: Les deux exemples supposent que vous avez un fichier texte à lire de]
-1 pour une question non claire. Aucune mention si vous voulez l'int stocké dans binaire pour, comme texte, ou un autre format. Ce n'est pas une question très utile car elle demande comment utiliser une interface C héritée en C++. Utilisez plutôt iostreams. – flodin
Vous ne devez pas le voter parce qu'il ne connaissait pas la bonne question à poser. –
Était "buffer = (int *) (sizeof (int));" censé être un appel à malloc() ou quelque chose? – bk1e