Bonjour à tous.
(Grâce à certains du forum) J'ai un code qui me permet de lire N octets pour les copier dans une variable de taille N :
Le truc c'est que si val a pour taille 2 octets, je lis 2 octets mais dans mon programme ce n'est pas forcement le cas ! (val a pour taille 8octets mais je veux juste lire et copier 2 octets) Donc j'ai décidé de modifier un peu le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 template <class T> void read(T& val, const unsigned char* data, bool big_endian=true) { const size_t size = sizeof(T); unsigned char *ptr = reinterpret_cast<unsigned char*>(&val); for(size_t i=0; i<size; ++i) { ptr[big_endian ? size - i - 1 : i] = data[i]; } }
Je pensais pas trop prendre de risque en faisant ça mais le compilo me hurle dessus en disant : error : 'size' cannot appear in a constant-expression
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 template <class T> void EndianTools::readnData(T& val, const size_t size, const unsigned char* data, int msb, int lsb, bool big_endian=true) { typedef typename unsigned_<size>::type type; type *ptr = reinterpret_cast<unsigned char*>(&val); for(size_t i=0; i<size; ++i) ptr[big_endian ? size - i - 1 : i] = data[i]; }
Si quelqu'un pouvait m'expliquer ce qu'il se passe (oui j'ai envie de comprendre) et aurait une idée.
Partager