begin process at 2012 02 10 18:04:55
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

sizeof bizarre


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

sizeof bizarre

mardi 3 août 2004 à 22:01:32 | sizeof bizarre

khayyam

bonjour,


j'ai la structure suivante :
typedef struct
{
unsigned char sign1, sign2;
unsigned long size_totale, reserve,offset;

unsigned long size_entete, largeur, hauteur;
unsigned char nb_plans[2], deep_codage[2];
unsigned long method_comp, size_image, reso_ho, reso_ver, nb_coul_pal, nb_cou_imp;
} Header;


si vous comptez les champs ainsi que leur taille, vous trouverez un poids de 54 octets pourtant sizeof(Header) me sort 56 octets (sous windows). comment ça se fait ?
mardi 3 août 2004 à 22:14:27 | Re : sizeof bizarre

djl

parce ce que à partir de unsigned char sign1, sign2; ta structure n'est plus alignée

l'adresse de size_totale commence à l'offset +4 et non +2 car son adresse doit etre un multiple de 4
mardi 3 août 2004 à 22:21:03 | Re : sizeof bizarre

khayyam

encore une chose que je ne savais pas !

mais alors, comment dois-je m'y prendre pour travailler avec un espace de 54 octets que je remplis avec des nombres codés sur 1, 2 ou 4 octets, tel que dans la définition de ma structure ?
mardi 3 août 2004 à 22:29:33 | Re : sizeof bizarre

djl

ben en memoire l'adresse suivante apres ta struct sera un multiple de 4, donc au moins +56
il faut que tu considere 2 octets de bourrage, tu peux t'arranger pour qu'ils soient à la fin en mettant les 2 chars en dernier ( char = 1 octet donc adresse multiple de 1)
mardi 3 août 2004 à 22:35:41 | Re : sizeof bizarre

khayyam

il ne m'est pas possible de mettre mes deux char à la fin, l'ordre des champs doit rester inchangé. mais s'il n'est pas possible de considérer une struct pour travailler avec un espace de 54 octets, vois-tu une autre solution, sachant que cet espace doit être rempli petit à petit par paquets de taille variables (de 1 à 4 octets à la fois) ?
mardi 3 août 2004 à 22:39:55 | Re : sizeof bizarre

djl

oui ;)


typedef struct
{
char att[54];
} Header;

apres cree ta petite bibliotheque de fonctions pour indexer les diffrents champs
mardi 3 août 2004 à 22:42:19 | Re : sizeof bizarre

djl

c'est sans doute pas la meilleur solution, mais je vois que ca
mardi 3 août 2004 à 22:47:55 | Re : sizeof bizarre

khayyam

c'était là-dessus que j'étais parti mais j'avais eu des soucis alors j'avais voulu changer de structure de données. retour à la case départ.
mardi 3 août 2004 à 22:53:52 | Re : sizeof bizarre

BruNews

Administrateur CodeS-SourceS
Tu es absolument tenu par la forme de cette structure ?
Si est non, faut absolument la changer car tres mauvais comme djl te l'a explique. L'alignement correct des donnees est la 1ere chose a respecter au debut de l'ecriture d'un logiciel.

ciao...
BruNews, Admin CS, MVP Visual C++
mardi 3 août 2004 à 22:56:13 | Re : sizeof bizarre

khayyam

donc pour utiliser ce tableau [54], j'ai quelques soucis,

#define CTOI(C) (*(int*)&C)

unsigned char[54]={0};
CTOI(header[22])=hauteur;

alors, dès que hauteur dépasse le poids d'un octet (255), ça plante :-(

1 2 3 4 5

Cette discussion est classée dans : long, nb, size, sizeof, unsigned


Répondre à ce message

Sujets en rapport avec ce message

Problème avec memset [ par ndubien ] Bonjour, je dispose d'une fonction qui alloue de la mémoire à un tableau puis le remplie de 0 grâce à memset(), mais le problème est que se remplissag Utiliser memset avec unsigned long *ma_variable [ par ndubien ] Bonjour, Je possède une variable unsigned long *ma_variable = malloc( sizeof(unsigned long) * 10 ); que je souhaiterais remplir de 0, j'ai alors pense Conversion de type [ par rfad ] Bonjour, Je développe une DLL en Visual C++ "Visual Studio 8" avec des fonctions qui font du cryptage. Une des fonctions doit prendre un unsigned long ReadprocessMemory & WriteFile [ par Deimos_ ] Salut à tous, J'ai un petit problème avec les fonctions ReadProcessMemory() et WriteFile() ! En fait, je souhaiterais obtenir dans un fichier texte q Traduction du C++ vers VB [ par zgezou ] Bonjour,          je suis nouveau en programmation et j'aimerais savoir comment traduire du C++ en VB. En fait j'ai besoin d'utiliser des fonctions se type unsigned long long avec borland c++ [ par douss4 ] Bonjour,Je fait actuellement un programme de cryptage qui utilise une clé de 64 bits, ce qui correspond à la taille (d'après mes recherches) d'un unsi efstream, impossibilité d'écrire dans un fichier .txt [ par LaGrandeBete06 ] Bonjour à tous, Je viens de me mettre au C++ et je dois créer et ouvrir un fichier .txt avec une methode, puis j'appelle une autre methode pour écrir asservissement position et vitesse [ par marabou34 ] bonjours ,je développe actuellement un contrôleur moteur a base du microprocesseur  NXP lpc2138 j utilise uvision3 comme compilateur et le kit mcb2130 Manipuler des caracteres un par un avec la fonction read... [ par ROW_PyRo ] Bonjour, Je suis actuellement sur un projet, BSQ. [quote] Il s'agit de trouver le plus grand carré possible sur un plateau en évitant des obstacles. taille des types... [ par li ] Bonjours a tous. Voila ma question, j'ai une structure : struct header { unsigned char useless1: 1; unsigned char type : 1; unsigned short dat


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,370 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales