Remarque: 0x11111111 ne veut pas dire 8 bits tous ensemble à 1. Il est un nombre hexadécimal de 4 octets, où un octet est défini sur 0x11.
0xFF est un seul octet (8 bits) lorsqu'un bit est mis à 1.
Ensuite, pour obtenir ce que vous voulez, vous pouvez utiliser pour isoler certains MACROs les bits dont vous avez besoin:
#define TOKEN1(x) ((x)>>7)
#define TOKEN2(x) (((x)>>3) & (0xFF>>5))
#define TOKEN3(x) (((x)>>5) & (0xFF>>5))
N'a pas testé.
Une autre idée, pourrait être celle de mettre dans une union char et un struct en utilisant bitfield caractères
union {
struct { char a:3; char b:4; char c:3; };
char x;
};
De cette façon, vous pouvez utiliser x pour modifier l'octet entier, et a, b et c à accès aux jetons simples ...
Modifier: 3 + 4 + 3 = 8.
Si vous avez besoin de 10 bits, vous devez utiliser un court au lieu d'un caractère. Si, au contraire, certains de ces bits se chevauchent, la solution utilisant MACRO sera probablement plus facile: vous aurez besoin de plus d'une structure dans l'union pour obtenir le même résultat avec la deuxième solution ...
... par où commencer * quoi *? – Flinsch
Travail à domicile? Rien de mal avec les devoirs, mais les questions doivent être signalées comme telles. Cela aide la communauté à mieux situer ses réponses pour être plus utile. –
Maintenant que j'en parle ... 3 + 4 + 3! = 8 ... – peoro