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 :
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];
	}
}
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
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];
 
}
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
Si quelqu'un pouvait m'expliquer ce qu'il se passe (oui j'ai envie de comprendre) et aurait une idée.