[Dcmlib] write_binary

Jean-Pierre ROUX jean-pierre.roux at creatis.insa-lyon.fr
Fri Oct 29 14:17:25 CEST 2004


>Salut,



>Le probleme c'est que je ne comprends pas le SwapCode, qu'est que 
>c'est que Bad big endian et Bad little endian. Est-ce que lors de 
>l'ecriture il faut ecrire ce genre de bad byte ?

C'est une antiquité due au fait que nous voulons continuer à pouvoir 
lire les fichiers ACR-NEMA...
En ACR-NEMA, la norme était (déja) : little-endian pour tout le monde.
Ca n'etait tellement pas respecté qu'en DICOM, ils ont rajouté un 
champ 'Transfert Syntax'.
Et les constructeurs qui tentaient de respecter la norme (little 
endian) le faisaient 'par soft' et, parfois se livraient à des truc 
'curieux' pour les 'int 32'.
Les termes 'Bad Bid Endian' et 'Bad Little Endian' avaient été pompés 
par moi sur les pages de Sebastien Barré, qui les avait pompés sur 
celles de David Clunie.
On peut donc les considérer comme communément admis.

Quant à leurs 'valeurs', elles se voulaient mnémoniques de ce qu'il y 
a avait à opérer comme permutations d'octets sur un int32 qui aurait 
été écrit sur disque de manière erronnée.
C'était déduit de la 'longueur sur la quelle est codée la longueur du 
premier groupe, et qui est *forcément* 4, codée sur 4 octets.

On examine, octet par octet la valeur lue sur disque, et, selon que l'on a :
0000 0004
0004 0000
0400 0000
0000 0400
on saura quelle permutation doit etre faite pour obtenir en mémoire 
la meme chose que
uint32_t i=4;

Lors de l'écriture, on ecrit du 'good' big endian ou du 'good' little endian
(selon le processeur sur lequel on travaille).
Jusqu'a présent, pour éviter de perdre (encore un peu plus) de temps, 
en permuttant les octets, on écrivait sur disque dans le même ordre 
que ce qu'il y a en mémoirez, et on ajustait la 'Transfert Syntax' 
pour que ca soit cohérent.

JPRx




>
>-----------------------
>
>A propos de SwapCode, est-ce qu'il y a un interet a garder 0, 4321, 
>3412, 2143 ... ca me fais penser a des nombres magiques. Je 
>comprends que c'est explicit mais un enum:
>
>enum {
>BigEndian        // 0
>LittleEndian     // 4321
>BadBigEndian     // 3412
>BadLittleEndian  // 2143
>}
>
>est aussi explicit, non ?
>
>Merci pour ceux qui m'auront lu jusqu'ici :)
>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 univ-lyon1.fr
								   




More information about the Dcmlib mailing list