[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