[C] récupérer un entier sur 2 octets dans un fichier [résolu]

récupérer un entier sur 2 octets dans un fichier [résolu] [C] - C++ - Programmation

Marsh Posté le 11-04-2003 à 11:52:28    

Bonjour,
 
Je dois récupérer un nombre codé sur 2 octets dans un fichier, et je ne comprends pas pourquoi le code suivant ne fonctionne pas :  
 

Code :
  1. int   d_tmp = 0;
  2.     fread(&d_tmp + 2, 1, LN_LONGUEUR, f_ebcdic);

 
 
LN_LONGUEUR vaut 2.
 
Vu qu'un int = 4 octets, et que le nombre est codé sur 2 octets seulement, je pensais lui passer l'addresse de l'entier + 2 octets. Bon ca me semblait bien crade (quoique?), mais j'aurais voulu comprendre pourquoi ca ne marchait pas (d_tmp vaut 0). Là pour l'instant je fais :  
 

Code :
  1. int    d_tmp, d_ln_data;
  2.     d_tmp = d_ln_data = 0;
  3.     fread(&d_tmp, 1, LN_LONGUEUR, f_ebcdic);
  4.     d_ln_data = d_tmp >> LN_LONGUEUR * 8;


 
et ca marche, donc le nombre est bien récupéré.
 
Merci d'avance


Message édité par KSauzeRK le 11-04-2003 à 12:14:01
Reply

Marsh Posté le 11-04-2003 à 11:52:28   

Reply

Marsh Posté le 11-04-2003 à 11:58:47    

ben si tu lis un short int il va lire seulement deux octets non?
short int data;
 
fread(&data, sizeof(short int),1,ptr_file)
je sais pas je dis ca comme ca mais c'est a essayer


Message édité par polo021 le 11-04-2003 à 12:01:50
Reply

Marsh Posté le 11-04-2003 à 12:01:11    

Citation :

Vu qu'un int = 4 octets, et que le nombre est codé sur 2 octets seulement, je pensais lui passer l'addresse de l'entier + 2 octets


 
deja je parierais pas la dessus
ensuite :
 
int tadaga;
int * r = &tadaga + 2;
 
tu n'a pas avance de deux octets comme tu le crois, mais de 8 (bah ouais, 2 * 4 :D)
 
si tu veux lire un short, utilise un short et converti ensuite en entier

Reply

Marsh Posté le 11-04-2003 à 12:13:19    

Honte à moi jusqu'à la fin des temps car :
 
- j'avais oublié l'existence du type short (si si), c'est pour ca que je m'emmerdais avec un int  
 
- j'avais oublié que le + 2 était pas égal a + 2 octets, mais était fonction du type...c'est con il m'aurait segfaulté, ca m'aurait peut-être rafraichi la mémoire...
 
Merci à vous en tout cas.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed