![]() |
Показать все 5 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Битовые сдвиги, нужна помощь (https://hlfx.ru/forum/showthread.php?threadid=4352)
Битовые сдвиги, нужна помощь
Есть такая структура:
1 | // TS packet: 188 bytes, 4 bytes header, 184 bytes payload |
2 | struct video_head { |
3 | uint32_t startcode:32; |
4 | uint32_t hSize:13; |
5 | uint32_t vSize:13; |
6 | ... |
7 | }; |
8 |
video_head *pTest = buff; |
printf( "Test: %d\n", pTest->hSize ); |
unsigned short hSize = (buff[i+2] << 8 | buff[i+3]) & 0x1fff; |
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Вообще странная запись структуры.
Как я понял там что то вроде такого:
your_group x;
int line_id = 2;
long pos;
pos = (line_id) * sizeof(your_group) + sizeof(int);
fseek(file, pos, SEEK_SET);
fread(&x, sizeof(your_group), 1, file);
Хотелось бы самому понять как адекватно работать со структурами, и каким образом там хранятся байты (я так понял так же как и в массиве?). Я вот посмотрел в юнионах так вообще самый последний элемент затирает предыдущие (и ДМ помог). Си только начал учить, тапками не кидаться .
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Что за buff, какого он типа? А пытаясь вытащить что-то из buff, который, видимо, иного типа чем video_head, ты рискуешь натолкнуться на выравнивание структуры (биты между некоторыми полями могут не использоваться).
Не думаю, что там есть выравнивание.
buff = это просто буфер, набор unsigned char
А сама структура: http://en.wikipedia.org/wiki/Elementary_stream
Header for MPEG-2 video elementary stream
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Так там же по 12 бит, а не по 13.
Каждая шестнадцатиричная цифра соответствует 4 битам, так что можешь посмотреть, что там получается при чтении и приводить к нужному виду. Я не совсем понял, что ты подразумеваешь под обратным порядком. Есть little и big-endian, а уж какой из них обратный - это относительно.
В общем выводи так и разбирайся:
for (i=0; i<count; ++i) |
printf("%02x", buf[i]); |
Временная зона GMT. Текущее время 14:43. | Показать все 5 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024