Je suis en train de lire un tas de valeurs binaires d'un fichier texte qui sont en binaire parce que je les ai stockées en utilisant fwrite
. Le problème est que la première valeur du fichier est de 5 octets et que les 4800 suivantes ont une taille de 2 octets. Donc, quand j'essaie de parcourir le fichier et de lire les valeurs, cela me donne de mauvais résultats car mon programme ne sait pas qu'il devrait prendre 5 octets la première fois et ensuite 2 octets les 4800 restants.Comment lire des valeurs de bits de tailles différentes à partir d'un fichier?
Voici comment je suis à vélo dans le fichier:
long lSize;
unsigned short * buffer;
size_t result;
pFile = fOpen("dataValues.txt", "rb");
lSize = ftell(pFile);
buffer = (unsigned short *) malloc (sizeof(unsigned short)*lSize);
size_t count = lSize/sizeof(short);
for(size_t i = 0; i < count; ++i)
{
result = fread(buffer+i, sizeof(unsigned short), 1, pFile);
print("%u\n", buffer[i]);
}
Je suis sûr que je vais devoir changer ma déclaration fread
parce que la première valeur est de type time_t
donc je vais probablement besoin d'une déclaration qui ressemble à ceci:
result = fread(buffer+i, sizeof(time_t), 1, pFile);
Cependant, cela n'a pas de travail quand je l'ai essayé et je pense qu'il est parce que je ne suis pas en train de changer la position de départ correctement. Je pense que pendant que je lis 5 octets de données, je ne bouge pas assez la position de départ.
Est-ce que quelqu'un ici a une bonne compréhension de fread
? Pouvez-vous s'il vous plaît laissez-moi savoir ce que je peux changer pour que mon programme accomplisse ce dont j'ai besoin.
EDIT:
Voici comment j'écris au fichier.
fwrite(&timer, sizeof(timer), 1, pFile);
fwrite(ptr, sizeof(unsigned short), rawData.size(), pFile);
EDIT2:
J'ai essayé de lire le fichier en utilisant ifstream
int main()
{
time_t x;
ifstream infile;
infile.open("binaryValues.txt", ios::binary | ios::in);
infile.read((char *) &x, sizeof(x));
return 0;
}
Cependant, maintenant il ne compile pas et me donner un tas d'erreurs undefined reference to
code Je n'ai même pas écrit.
Il peut être utile d'afficher le code utilisé pour stocker les données.Aussi lisez-vous ce fichier d'une autre machine qui l'a écrit? – Galik
Pas même machine et j'ai ajouté le code 'fwrite'. C'est plutôt standard. Je prends juste quelques valeurs d'un QVector et les écris dans un fichier. –
Le code utilisé pour stocker les données semble être C++? Donc, cela devrait être étiqueté C++? – cat