Каков наилучший способ создания конструктора для структуры (в которой есть член объединения, имеет ли это значение?) Для преобразования типа uint8_t
в структуру?
Вот мой пример для уточнения:
struct twoSixByte
{
union {
uint8_t fullByte;
struct
{
uint8_t twoPart : 2;
uint8_t sixPart : 6;
} bits;
};
};
uint32_t extractByte(twoSixByte mixedByte){
return mixedByte.bits.twoPart * mixedByte.bits.sixPart;
}
uint8_t tnum = 182;
print(extractByte(tnum)); // must print 2 * 54 = 108
приписка
Находя из комментариев и ответов, в C ++ невозможно наказать типы для союзов.
Приведенные решения немного сложны, особенно если в коде много таких структур. Есть даже ситуации, когда байт делится на несколько битовых частей (более двух). Таким образом, без использования объединений и использования битовых наборов и сдвигаемых битов код становится очень обременительным.
Вместо этого мне удалось найти более простое решение. Я просто преобразовал тип, прежде чем передать его в функцию. Вот фиксированный код:
struct twoSixByte
{
union {
uint8_t fullByte;
struct
{
uint8_t twoPart : 2;
uint8_t sixPart : 6;
} bits;
};
};
uint32_t extractByte(twoSixByte mixedByte){
return mixedByte.bits.twoPart * mixedByte.bits.sixPart;
}
uint8_t tnum = 182;
twoSixByte mixedType;
mixedType.fullByte = tnum;
print(extractByte(mixedByte)); // must print 2 * 54 = 108