Bonjour
J'ai une classe cVector8Bits qui implemente une table d'octets (8 bits) dans un systeme dont la taille minimale est 16 bits.
La structure des donnees suit ce modele:
Le premier mot (16 bits) contient 2 octets Buffer[0] et buffer[1], le second mot Buffer[2] et buffer[3], etc...
On voit que l'index correspond aux octets mais physiquement, l'adresse du mot en fonction de l'index (n) est defini par *(Buffer + n/2).
Avec une union qui partage le 16 bits en 2 fois 8 bits:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class cVector8Bits { uUint16 Buffer[SIZEMAX]; //Pour le type uUint16 cf. ci-dessous. int16 Size; public: cVector8Bits( int16 size = 0) : Size( size) {} const int16 & operator[]( int16 n) const { return n & 1 ? *(Buffer + n/2).byte.Lsb : *(Buffer + n/2).byte.Msb;} int16 & operator=( int16 val) { ??????????} };
J'ai un probleme pour l'ecriture de l'operateur =, qui doit necessairement tenir compte de l'index n.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 struct cUint16_Uint8 { Uint16 Lsb : 8; Uint16 Msb : 8; }; union uUint16 { Uint16 word; cUint16_Uint8 byte; };
Il existe toujours le moyen de creer une fonction:
Mais il me paraissait plus esthetique de surcharger l'operateur = pour pouvoir ecrire: Objet.Buffer[index] = valeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 cVector8Bits::ValueSet( int16 val, int16 n) { // Si n est pair on affecte le Lsb, s'il est impair on affecte le Msb n & 1 ? *(Buffer + n/2).byte.Lsb = val : *(Buffer + n/2).byte.Msb = val;} }
Quelqu'un aurait-il une idee pour implementer la surcharge de l'operateur =? Moi. je n'y arrive pas (encore).
Merci
Partager