Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
такое чтение и запись слова не по границе слова на некоторых платформах вообще будет приводить к аварийному завершению программы
если так хочется структуру с невыровненными полями, то надо все хранить в байтовом массиве и отказаться от операции =
т.е.
тогда получится максимальная кросс-платформенность
если кросс-платформенности путем таких геморроев (арифметика смещений) не хочется, а хочется чтобы просто не падало, то еще вариант (32-битное выравнивание)
но тут надо еще посмотреть как компилятор little-endian и big-endian будет размещать битовые поля внутри слова (т.е. если вдруг важно чтобы bitfield2_hi непосредственно соседствовал с bitfield2_lo)
1) (pl + 4 + 4 + i * 10) - так нужно, и что бы каждый раз по новому?
2) sectorsNum data type? Сообщите, пжлста.
P.S. Ябы этому дяде, с не выравненными полями, поля то, повыравнивал.
А если это формат хранения данных на носителе? Например, на диске?
Тут только одна таблетка: декларируется соответствующая упакованная структура с полным описанием полей и делается каст указателя к ней. А затем уже выдёргиваются значения по полям.
>>упакованная структура с полным описанием полей
Это нормально. Так и делают.
>>А затем уже выдёргиваются значения по полям.
sectorsNum не является полем структуры, что наверняка заметили.
Или вы о чём то другом?
Проверяю предположение: sectorsNum хранится в (signed/unsigned)char — больше не нужно. В цикле -- численное значение количества секторов.
за невыровненный доступ вообще убивать
если так хочется структуру с невыровненными полями, то надо все хранить в байтовом массиве и отказаться от операции =
т.е. тогда получится максимальная кросс-платформенность
если кросс-платформенности путем таких геморроев (арифметика смещений) не хочется, а хочется чтобы просто не падало, то еще вариант (32-битное выравнивание)
но тут надо еще посмотреть как компилятор little-endian и big-endian будет размещать битовые поля внутри слова (т.е. если вдруг важно чтобы bitfield2_hi непосредственно соседствовал с bitfield2_lo)
2) sectorsNum data type? Сообщите, пжлста.
P.S. Ябы этому дяде, с не выравненными полями, поля то, повыравнивал.
Тут только одна таблетка: декларируется соответствующая упакованная структура с полным описанием полей и делается каст указателя к ней. А затем уже выдёргиваются значения по полям.
Это нормально. Так и делают.
>>А затем уже выдёргиваются значения по полям.
sectorsNum не является полем структуры, что наверняка заметили.
Или вы о чём то другом?
Проверяю предположение: sectorsNum хранится в (signed/unsigned)char — больше не нужно. В цикле -- численное значение количества секторов.