Примечание : 0x11111111 не означает, что все 8 бит установлены в 1. Это шестнадцатеричное число из 4 байтов, где любой байт имеет значение 0x11.
0xFF - это один байт(8 бит), где любой бит установлен в 1.
Затем, чтобы достичь того, что вы хотите, вы можете использовать несколько MACRO для выделения нужных бит:
#define TOKEN1(x) ((x)>>7)
#define TOKEN2(x) ( ((x)>>3) & (0xFF>>5) )
#define TOKEN3(x) ( ((x)>>5) & (0xFF>>5) )
DidnПротестируйте его.
Другая идея, возможно, заключалась в том, чтобы вставить объединение char и структуры с использованием битовых символов
union {
struct { char a:3; char b:4; char c:3; };
char x;
};
Таким образом, вы можете использовать x для редактированиявесь октет и a, b и c для доступа к одиночным токенам ...
Изменить : 3 + 4 + 3! = 8.
Если вынужно 10 бит, вы должны использовать короткий вместо символа.Если вместо этого некоторые из этих битов перекрываются, решение с использованием MACRO, вероятно, будет проще: вам потребуется более одной структуры внутри объединения, чтобы достичь того же результата со вторым решением ...