Newsgroup: it.comp.lang.c++
Titolo: Struttura in BC++

Salve a tutto il NG,
sto creando una applicazione che legge ed elabora un file bitmap con C++
Borland Builder 5. Per memorizzare l'header di 14 bytes ho creato una
struttura sě fatta:
struct
{
  WORD    a
  DWORD   b
  WORD    c
  WORD    d
  DWORD    e
}
Primo problema: il debugger mi vede la struttura di dimensione 16 caratteri:
per caso fa l'allineamento alla DWORD ?
Inoltre: quando leggo la struttura tramite TMemoryStream->Read l'area viene
valorizzata correttamente (lo vedo tramite la visualizzazione in modalita'
dump in watch variables), ma i singoli campi della struttura vengono
valorizzati in modo totalmente sbagliato esclusa la prima WORD: sembra che
si perda per strada il terzo e quarto byte.
Ho fatto altre prove spostando la sequenza dei campi ma il problema
persiste: si perde per strada 2 bytes, senza che abbia trovato alcuna
logica.
Il problema lo posso bypassare leggendo i singoli campi uno per volta ,
pero' vorrei capire perche' mi fa questo casino per evitare problemi simili
in futuro. Chi mi puo' aiutare a capire ?
Grazie, Alex.T

per caso fa l'allineamento alla DWORD ?
scusa il tipo WORD cosa č? un #define short o un #define int ???
se fosse un #define INT allora sarebbero 4 * 5 e darebbe 20
se fosse #define SHORT allora sarebbe 6+8 = 14 ... il bc5b ha x
default l'allineamento QWORD .. quindi il minimo č 8 ... ed il
multiplo 16
Antonio

 wrote in message
nclbfucto58c3l0st...@4ax.com...

Scusa, venendo dall'elettronica l'ho dato per scontato, WORD e' uno short
(16 bit).
Ma se l'allineamento di default e' QWORD e' possibile cambiare questa
impostazione ? In ogni non dovrebbe aggiungere 2 bytes 'dummy' in coda alla
struttura ? A me saltando un paio di bytes mi crea un po' di casino.....
Alex.T

FERMI TUTTI !!!!
Per risolvere il problema bastava cambiare il tipo allinamentori da qword a
word nelle opzioni del progetto. Scusate ma non ho ancora la padronanza del
BC !!
Grazie, Alex.T


struttura ? A me saltando un paio di bytes mi crea un po' di casino.....
Si, se l'allineamento di default č QWORD si puň cambiare da Projects |
Options | Advanced Compilers -> Data alignment 
ma cmq, questo allinea i dati in modo che stiano all'inizio di ogni
paragrafo .. non influisce affatto con la dimensione dei dati ...
sizeof(struttura) che valore ti restituisce?? dovrebbe restituirti 14
.. non 16, in quanto l'allineamento č un'ottimizzazione.. ma il sizeof
viene risolto a compile-time .. e quindi da 14 ... che gli piaccia o
no!
La perdita dei due byte non me la spiego nemmeno io ... io ho usato
per visualizzare img di un formato proprietario con il builder.. ed ho
avuto problemi con gli Stream, cosě li ho cestinati e sono ritornato
alle + classiche fopen, fread  ... credo mi sparissero proprio dei
byte... (non ricordo.. ma ricordo benissimo di aver cestinato gli
stream del builder e del delphi! )
cmq, semmai lo ritieni opportuno, postami il progettino via mail, cosě
magari 2 teste concludono qualcosa al posto di 1 
ciao
Antonio

 Antonio
Grazie, ma come vedi dall'altro mio post ho risolto il problema. Cerchero'
di ricordarmi di allineare alla WORD ogni nuovo progetto per con cadere in
problemi tipo questo ;-)
Grazie e ciao.
Alex.T