uimsbf和 bslbf的含義
阿新 • • 發佈:2017-08-01
程序 iuc 整數 經驗 slb $@ str ant 描述 所謂用bslbf是因為這個串沒到一個字節,或是不是字節的整數倍數,才用這種所謂“從左邊數起多少位的比特流”
在數字電視領域,SI的規範裏面,基本上所有的描述信息都是由一串有序的這種規則構成。比如5樓的:
Vision :4 bslbf 這是4位 ,半個字節,可以表達的區間是1111= 0xF
head_length:4 bslbf 同上,一個tag表示位必須對應一個length位,但是length位不一定要對應tag位,可以是在某個tag裏面,私有約定哪幾位是表示後面具體負載的長度。比如說後面有4個字節,這裏的length就是0x4了
service_id:16 uimsbf 這是兩個字節的表示位,11111111 11111111 = 0xFFFF
msg_id:16 uimsbf
在傳輸流裏面傳輸的東西是一個:
tag 協議棧約定當收到的時候監聽,當約定tag位長為1個字節時,例如是0x16
length: 前端發送的,表示這個tag包含的內容的具體長度,按照上面的例子,就是一共有5個字節的位長,一個字節是2的長度“0xFF”,所以在這裏的例子是0xA的長度,約定length位的位長是2個字節的話,就是0x000A。
在C裏面,解析這些東西是通過位計算(操作),因為傳輸流裏面下來的數據大概是如下:
FDAIFNIWOQNIZNIUC!#@$%^#$@[email protected]%%&……*……%%在整個傳輸流中,只有收到某一個程序裏面寫的tag後,才開始工作。
關於用C如何表示,其實必須有一個接口能把數據傳近來,然後監聽約定的值,如果沒有,就是無用的數據,直接拋棄。如果有,就用C按照規範,把tag後面的負載拆開。每一位該怎麽解析,用枚舉搞定,最後封裝個判斷的函數, 哪些位的哪些組合返回什麽, 哪些位的哪些組合又返回什麽。然後以後別人用你的東西繼續開發,或是自己繼續開發,都方便了,公司裏面也是這樣處理的,就是專門做協議解析的人,和專門做規範的人,和應用實現的人(其中應用實現最簡單,返回值就那麽幾個, 哪個返回值就操作封裝好的那些函數即可)
bslbf代表位串,即“Bit string, left bit first ”,
uimsbf代表無符號整數,即”unsinged integer, most significant bit first”,數字表示該數據項所占的比特數
又一解釋:
bslbf (bit string, left bit first) 比特串,左位在先
uimsbf (unsigned integer,most significant bit first) 無符號整數,高位在先
我也寫一點經驗吧,可能以後還有人查這個資料。
這兩個單位的本身都是一樣的都是bit的意思,就是2進制, 如何轉換16進制,就用數手指吧……比如說4位的2進制那就是1111,然後數手指就數出來了~==!==
在數字電視領域,SI的規範裏面,基本上所有的描述信息都是由一串有序的這種規則構成。比如5樓的:
Vision :4 bslbf 這是4位 ,半個字節,可以表達的區間是1111= 0xF
head_length:4 bslbf 同上,一個tag表示位必須對應一個length位,但是length位不一定要對應tag位,可以是在某個tag裏面,私有約定哪幾位是表示後面具體負載的長度。比如說後面有4個字節,這裏的length就是0x4了
service_id:16 uimsbf 這是兩個字節的表示位,11111111 11111111 = 0xFFFF
在傳輸流裏面傳輸的東西是一個:
tag 協議棧約定當收到的時候監聽,當約定tag位長為1個字節時,例如是0x16
length: 前端發送的,表示這個tag包含的內容的具體長度,按照上面的例子,就是一共有5個字節的位長,一個字節是2的長度“0xFF”,所以在這裏的例子是0xA的長度,約定length位的位長是2個字節的話,就是0x000A。
在C裏面,解析這些東西是通過位計算(操作),因為傳輸流裏面下來的數據大概是如下:
FDAIFNIWOQNIZNIUC!#@$%^#$@[email protected]%%&……*……%%在整個傳輸流中,只有收到某一個程序裏面寫的tag後,才開始工作。
uimsbf和 bslbf的含義