[Dcmlib] write_binary

Mathieu Malaterre mathieu.malaterre at kitware.com
Thu Oct 28 23:39:40 CEST 2004


Salut,

	Bon j'attaque la bete sur Mac. La premiere etape est je pense 
concentrer l'ecriture (=les anciens fwrite) dans une nouvelle methode 
qui selon le processeurs ecris en BigEndian ou LittleEndian.

	Je propose quelque chose du genre:

template <class T>
ostream& binary_write(ostream& os, const T& val)
{
     return os.write(reinterpret_cast<const char*>(&val), sizeof val);
}

template <>
ostream& binary_write(ostream& os, const char* val)
{
     return os.write(val, strlen(val));
}

Il y aura sans doute un probleme pour le cas des type non-POD:

std::string y = "abc";
binary_write(fp, y);

ca compile sous gcc mais ca ne fais rien de ce que l'on crois...

Avis/Commentaires ?

-----------------------

Pour le Mac, en premiere etape je vais faire comme si j'etait sur little 
endian donc swap tout le temps, je devrais donc avoir:

template <class T>
ostream& binary_write(ostream& os, const T& val)
{
     char *swap = SwapByte( val );
     return os.write(reinterpret_cast<const char*>(&swap), sizeof swap);
}

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 ?

-----------------------

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





More information about the Dcmlib mailing list