華為程式設計大賽 TLV編譯碼

2021-06-23 05:49:55 字數 1330 閱讀 9628

描述:訊息的格式如下:  

1、一條訊息由乙個或多個基本資訊單元(information element)ie組成。 

2、每個ie採用tlv編碼。tlv是tag length value的縮寫,它是一種變長資料的編譯碼, 由tag,length(value的長度)及value三個域組成。

3、tag固定佔4個位元組,length固定佔2個位元組。 

4、位元組序按照大端序處理。  

根據ie的tag值大小對訊息中所有的ie由小到大排序,並輸出。

例如訊息:0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x66 

前面4個位元組是tag:0x00, 0x00, 0x00, 0x00 

後面2個位元組是長度:0x00, 0x02,  

後面的2個位元組0x00, 0x66是value 該訊息只有乙個ie。    

執行時間限制: 無限制 

記憶體限制: 無限制 

輸入:   

位元組流,位元組之間用「,」隔開,

如 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x02, 0x01, 0x02   

輸出:  

根據ie的tag值的大小對訊息中所有的ie排序,並輸出。

位元組序按照大端序處理。 位元組流,位元組之間用「,」隔開,

如: 0x00, 0x00, 0x00, 0x66, 0x00, 0x02, 0x01,0x02, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00。 

如果訊息解碼失敗,請輸出false。

樣例輸入:   0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00,0x00, 0x66, 0x00, 0x02, 0x01, 0x02 

樣例輸出:   0x00, 0x00, 0x00, 0x66, 0x00, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00

思路:

略過前面的位,直接去計算第22,23,27,28位的值,就知道有n個value,然後讀取後續n個就行了,具體思路已經注釋。

#include#include#include#define maxbuf 65535

char buf[maxbuf];

char ies[100][maxbuf];

char temp[maxbuf];

int main()

}printf("%s",ies[0]);

for(j=1;j

TLV 格式及編譯碼示例

tlv是一種可變格式,意思就是 type型別,lenght長度,value值 type和length的長度固定,一般那是2 4個位元組 這裡統一採用4個位元組 value的長度有length指定 編碼方法 1.將型別type用htonl轉換為網路位元組順序,指標偏移 4 2.將長度length用ht...

華為程式設計大賽

本試題採用自動測試用例進行評分,測試用例不對考生公開,凡不滿足提交要求導致不能執行或用例不通過,不予評分 1 排序演算法 20分 l 問題描述 將給定的無序整數陣列降序排列後輸出,輸入的無序陣列長度為n,型別為unsigned int l 要求實現函式 void dscsort const int ...

華為程式設計大賽決賽題

題目 俄羅斯方塊覆蓋。給定 乙個21 21的格仔矩陣,從1到441編號。輸入是乙個檔案testin.txt,裡面有4個數字,每乙個數字代表陣列下標,陣列元素值為1,表示障礙。空著的格仔用0表示。這四個數字代表的圖形只能是這個中的一種!也就是說。矩陣中4個1勾勒出個圖形只能是這兩種樣子。要求是用俄羅斯...