- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
if ( sectors && sectorsNum )
{
for ( i = 0; i < ( int )sectorsNum; i++)
{
*(unsigned int*)(pl + 4 + 4 + i * 10 ) = sectors[i].originalNum;
*(pl + 4 + 4 + i * 10 + 4) = 3 ;
*(unsigned int*)(pl + 4 + 4 + i * 10 + 5 ) = sectors[i].usedNum;
*(pl + 4 + 4 + i * 10 + 9) = 4 ;
}
*(unsigned int*)(pl + 4 + 4 + i * 10 ) = newSectors;
*(pl + 4 + 4 + i * 10 + 4) = 0x0b ;
*(unsigned int*)(pl + 4 + 4 + i * 10 + 5 ) = newSectors * 0x200; // сектора в байты
}
В старых исходниках довольно крупного проекта нашелся сей замечательный отрывок... И очень одинокий коммент...
defecate-plusplus 17.05.2012 13:09 # 0
за невыровненный доступ вообще убивать
bormand 17.05.2012 13:44 # 0
defecate-plusplus 17.05.2012 16:04 # +3
если так хочется структуру с невыровненными полями, то надо все хранить в байтовом массиве и отказаться от операции =
т.е. тогда получится максимальная кросс-платформенность
если кросс-платформенности путем таких геморроев (арифметика смещений) не хочется, а хочется чтобы просто не падало, то еще вариант (32-битное выравнивание)
но тут надо еще посмотреть как компилятор little-endian и big-endian будет размещать битовые поля внутри слова (т.е. если вдруг важно чтобы bitfield2_hi непосредственно соседствовал с bitfield2_lo)
bormand 17.05.2012 18:36 # 0
bormand 17.05.2012 18:34 # 0
bormand 17.05.2012 18:36 # 0
sayidandrtfm 17.05.2012 19:28 # 0
2) sectorsNum data type? Сообщите, пжлста.
P.S. Ябы этому дяде, с не выравненными полями, поля то, повыравнивал.
SadKo 18.05.2012 08:53 # +1
Тут только одна таблетка: декларируется соответствующая упакованная структура с полным описанием полей и делается каст указателя к ней. А затем уже выдёргиваются значения по полям.
sayidandrtfm 18.05.2012 10:37 # 0
Это нормально. Так и делают.
>>А затем уже выдёргиваются значения по полям.
sectorsNum не является полем структуры, что наверняка заметили.
Или вы о чём то другом?
Проверяю предположение: sectorsNum хранится в (signed/unsigned)char — больше не нужно. В цикле -- численное значение количества секторов.
sayidandrtfm 18.05.2012 11:41 # 0