[Dcmlib] Big Endian suite

Jean-Pierre ROUX jean-pierre.roux at creatis.insa-lyon.fr
Wed Jan 12 09:10:54 CET 2005


At 17:36 -0500 11/01/05, Mathieu Malaterre wrote:
>>>Le morceau de code coupable c'est:
>>>
>>>if( BitsAllocated == 16 )
>>> {
>>>    uint16_t *im16 = (uint16_t*)Raw;
>>>    switch( SwapCode )
>>>    {

[...]

>>>cmVerboseMacro("SwapCode value (16 bits) not allowed.");
>>>    }
>>> }
>>>
>
>Je reitere ma question. Je ne comprends pas ce code. SwapCode 
>designe le SwapCode du fichier ou du processeur ? Car il y a deux 
>choses a faire:

Ni l'un ni l'autre!
Il indique le type de traitement qu'il faut appliquer a un ensemble 
consecutif de 4 octets lus dans le fichier pour en faire un 'int32' 
comprehensible par le processeur qui l'a lu.

Un fichier ecrit en 'BigEndian', lu sur MacOS aura un SwapCode=1234
(les octets sont dans l'ordre)
Ce même fichier, lu sur un PC 'intel inside' aura un SwapCode=2143
(il faudra permutter les octets)

Un fichier ecrit en 'LittleEndian', lu sur un PC 'intel inside' aura 
un SwapCode=1234
(les octets sont dans l'ordre)
Ce même fichier, lu sur MacOS aura un SwapCode=2143
(il faudra permutter les octets)

On notera qu'en ce qui concerne les fichier 'True Dicom' Big Endian, 
ce SwapCode sera modifié entre le goup 0002 et la suite du fichier ...

Ta proposition de le nommer comme suit

>enum {
> LITLLE_ENDIAN
> BIG_ENDIAN
> BAD_LITTLE_ENDIAN
> BAD_BIG_ENDIAN
 }

donnerait une mauvaise indication sur ce qu'est le SwapCode.
Si on veut a tout prix les nommer, il faudrait faire qq chose comme :
enum {
    ReadByteOrder1234
    ReadByteOrder2143
   ... etc..
}

(ReadByteOrder = 'ordre lu des octets', et non pas 'Lire l'ordre des octets')

JP

>
>Si le fichier est little endian *ET* on est sur little endian alors 
>il n'y a rien a faire. Mais si on est sur machine Big endian et le 
>fichier est little endian alors oui il faut swapper...
>
>J'ai un peu du mal a comprendre comment *une* seule variable 
>SwapCode peut jouer le role de deux variables non correlees...
>
>Merci
>Mathieu
>
>
>_______________________________________________
>Dcmlib mailing list
>Dcmlib at creatis.insa-lyon.fr
>http://www.creatis.insa-lyon.fr/mailman/listinfo/dcmlib

  Jean-Pierre ROUX
  UMR CNRS 5515-CREATIS
  Laboratoire de Radiologie Experimentale
  Hopital Cardiologique
  28 Avenue du Doyen LEPINE
  B.P. Lyon-Montchat
  69394 Lyon Cedex 03

  Tel      : (+33) 04 72 35 74 12
  Fax      : (+33) 04 72 68 49 16
  URL      : http://www.creatis.univ-lyon1.fr
  e-mail   : jpr at creatis.univ-lyon1.fr
								   




More information about the Dcmlib mailing list