Как парсить структуры с битовыми полями в С?
Так. Для начала...void* p = 02b05e1...SectionSyntaxIndicator=00 -Должна быть 1
Первые 8 бит отходят к "unsigned  tableID", все норм. А потом в описании идет однобитовый "unsigned  SectionSyntaxIndicator".
Значение второго байта == 0xB0, его первый бит == 0 и в результате все нормально.
Первые 4 бита 0xB0 равны 0, поэтому все следующие ("SectionSyntaxIndicator", "Reserved1", "Reserved2") поля будут равны 0 ибо это первые четыре бита этого же самого байта.
Поле "SectionLength" занимает 12 бит, стало быть оно захватывает вторые 4 бита из 0xB0 и весь байт 0x5E. Поэтому все правильно что оно тебе пишет 0x5EB.
Теперь. Про битовые поля в структурах.
habrahabr.ru/post/142662
После этой ссылки я даже не знаю, что еще от себя писать.
В целом, программа тут ни в чем не виновата, просто, по видимому, ты сам забыл что в шестнадцатиричном представлении байта пишется сперва старший квартет бит, а потом младший. Весной это бывает. :)
Так не годится делать. Чуть  только архитектуры будут различаться, как получится черт-те что!
Битовые поля - это страшное наследие 8-битных микроконтроллеров! Только там им и место!!!
А если хочется извращений, то хотя бы используйте стандартные типы (вместо unsigned надо писать uint16_t или uint32_t, смотря что под этим подразумевается) и обязательно упаковывайте структуру, т.к. по умолчанию gcc разместит ее члены с наилучшим выравниванием. Компилятор-то не в курсе, что вам подряд нужно..