Je n’ai absolument pas le courage de réenregistrer cette vidéo, le présent document corrige les qques ratés.
// Soit la boucle qui affiche en premier les octets de poids forts.
// Ici on commence par la fin du tableau puisque c'est little endian
// (d'abord les poids faibles) ; pour big endian, buffer[i] fait le job.
for (int i = 0; i < READ_LEN; ++i) {
printf("%.2x", buffer[READ_LEN - i - 1]);
}
unsigned long long n = 0; // La valeur initiale est primordiale
unsigned long long m = 0; // Soit un deuxieme pour l'exemple
for (int i = 0; i < READ_LEN; ++i) {
printf("%.2x", buffer[READ_LEN - i - 1]);
n = n << 8; // On décale n de bits vers la gauche.
// par conséquent les 8 bits de poids faibles sont à zéro
n = n | buffer[READ_LEN - i - 1]; // on ajoute les 8 bits
m = m*256; // on multiplie par la base (1octet = 256)
m = m + buffer[READ_LEN - i - 1];
}
BS_EXTRACT
va
bel et bien dans bit.h
par contre, il nous faut une nouvelle fonction (ici
macro) qui cache ces détails à l’utilisateur. La macro PLAYER
de buzzer.h
était la pour ça.#define PLAYER(_s, _p) BS_EXTRACT(_s, PLAYER_OFFSET + i*BUTTON_COUNT, BUTTON_COUNT)
// Ce qui permet de s'en servir comme
int pstatus = PLAYER(status, 2); // État des boutons pour le joueur 3
bits.h
. C’est un oubli plus que malencontreux. Elle
devrait se nommer, pour rester cohérent BS_ISSET
(un bit est-il présent dans
un bitset)