Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.09.20;
Скачать: [xml.tar.bz2];

Вниз

Расщепление байта на биты   Найти похожие ветки 

 
DVM ©   (2009-07-21 23:33) [0]

Подскажите, пожалуйста, что то никак не соображу, все ли верно я делаю.
Итак, есть структура с битовыми полями, описанная в С  как:

 struct RtpDataHeader
 {
   // Ver
   U8 cc:4;         // CSRC count
   U8 x:1;          // header extension flag
   U8 p:1;          // padding flag
   U8 version:2;    // protocol version

   // Payload
   U8 pt:7;         // payload type
   U8 m:1;          // marker bit

   U16 seqN;        // sequence number, network order
   U32 timestampN;  // timestamp, network order
   U32 ssrcN;       // synchronization source, network order
   U32 csrc[];      // optional CSRC list
 };


В паскале это дело превращается в такое:


 TRtpDataHeader = record
   Ver: Byte;
   Payload: Byte;
   Sequence: Word;
   Timestamp: DWord;
   SSRC: DWord;
   CSRC: PDWord;
 end;
 PRtpDataHeader = ^TRtpDataHeader;


Допустим у меня есть:
var
 Packet: TRtpDataHeader;

И я хочу поместить значение поля "protocol version" в переменную pv: byte;

Это так будет выглядеть:

pv := Packet.Ver shr 6

Все верно? С порядком бит ничего я не напутал?


 
Сергей М. ©   (2009-07-21 23:39) [1]

Вроде бы да ..
А что, есть сомнения ?


 
DVM ©   (2009-07-21 23:44) [2]


> Сергей М. ©


> А что, есть сомнения ?

Честно говоря есть небольшие, поэтому решил уточнить на всякий случай.


 
Сергей М. ©   (2009-07-21 23:53) [3]


> DVM ©   (21.07.09 23:44) [2]


Ну судя по сишной декларации 2-хбитовое поле версии находится в битах 6..7

После логического сдвига вправо на 6 бит они как раз окажутся в битах 0..1 результата..


 
Псалтырь ©   (2009-07-21 23:54) [4]

packed record?


 
Сергей М. ©   (2009-07-21 23:57) [5]


> Псалтырь ©   (21.07.09 23:54) [4]


Фиолетово.

Поле версии - младшее в порядке объявления полей в структуре.


 
Игорь Шевченко ©   (2009-07-21 23:57) [6]


>    SSRC: DWord;
>    CSRC: PDWord;
>  end;
>  PRtpDataHeader = ^TRtpDataHeader;


CSRC: array[0..0] of DWORD


 
KilkennyCat ©   (2009-07-21 23:58) [7]

ну и как здесь повлияет packed? ужмет до бита? :D


 
Игорь Шевченко ©   (2009-07-21 23:58) [8]


> Честно говоря есть небольшие, поэтому решил уточнить на
> всякий случай.


так практика - критерий истины. Всяко надежней, чем в форуме спрашивать :)


 
Сергей М. ©   (2009-07-21 23:59) [9]


> CSRC: array[0..0] of DWORD


Кстати, довольно важное замечание


 
Игорь Шевченко ©   (2009-07-22 00:00) [10]

кстати, packed я бы сделал. Все записи, принимаемые извне лучше объявлять packed, если гарантировано не известно обратное.


 
Сергей М. ©   (2009-07-22 00:01) [11]


> packed я бы сделал


Кстати, я бы тоже.


 
DVM ©   (2009-07-22 00:01) [12]


> Игорь Шевченко ©   (21.07.09 23:57) [6]


> CSRC: array[0..0] of DWORD

Да, так правильнее, спасибо.


> так практика - критерий истины. Всяко надежней, чем в форуме
> спрашивать :)

Это само собой, просто то того момента как я смогу проверить данный кусок в работе, т.е. принять пакет RTP и посмотреть содержимое мне еще пилить и пилить.


 
Сергей М. ©   (2009-07-22 00:03) [13]


> мне еще пилить и пилить


Пилите, Дмитрий, пилите - он золотой)


 
KilkennyCat ©   (2009-07-22 00:05) [14]


> packed я бы сделал

а я бы не торопился. мало данных.
насколько я помню, это влияет на время доступа, да и параметры компилятора тоже вроде как, учитывать надо, по выравниванию.


 
DVM ©   (2009-07-22 00:12) [15]

В данной записи не играет роли packed она или нет.


 
Игорь Шевченко ©   (2009-07-22 00:15) [16]

KilkennyCat ©   (22.07.09 00:05) [14]

Это может влиять на время доступа, если структура записи разрабатывается для обмена и все стороны используют одно и то же значение выравнивания, а если структура жестко задана извне, то кроме packed ничего не поиспользуешь.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2009.09.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
1-1216127848
IGray
2008-07-15 17:17
2009.09.20
Встроенный локализатор Delphi2007 - глюк с кириллицей!


2-1248094465
MAX
2009-07-20 16:54
2009.09.20
из Word в БД


15-1248080977
ford
2009-07-20 13:09
2009.09.20
trackBar с несколькими бегунками


15-1248160976
4got10
2009-07-21 11:22
2009.09.20
Не пашет клава%)


6-1206621682
Vikindos
2008-03-27 15:41
2009.09.20
clientSocket посылка строкой





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский