C 實現 CAT021報文格式解析

2021-07-22 07:55:23 字數 1844 閱讀 8143

這幾天接到乙個小專案,需要解析 cat021報文。費了九牛二虎之力終於看懂了報文解析的規則,接下來我就對我從二進位制資料到例項出各資料項相應的物件的過程做乙個小結,希望能幫到有需要的朋友。

首先是總體方法:  

/// /// 接收到的資料解析

///

///

///

private static datablock dateparser(byte datas)

接下來是核心方法:

/// /// 解析出資料項的實體列表

///

///

///

///

///

private static listdatagramparser(byte fspecbytes, int len, byte datas)

index--;

}count++;

}int currnetbytenum = 0;

byte databytes = new byte[len - 3 - fspecbytes.length];

array.copy(datas, 3 + fspecbytes.length, databytes, 0, databytes.length);

foreach (datagramuap dataitem in dataitems)

return dataitems;

}

根據位置確定資料項:

/// /// 根據位置確定資料項

///

/// 符號位元組第幾個位元組

/// 位元組第幾位

///

private static datagramuap initdategram(int count, int index)

return datagram;

}

解析出識別符號所佔的位元組:

/// /// 解析出識別符號所佔的位元組

///

///

///

private static byte getfspecbytes(byte dates)

//確定識別符號位元組數

fspecbytes = new byte[count - 2];

array.copy(dates, 3, fspecbytes, 0, fspecbytes.length);

return fspecbytes;

}

/// /// 判斷下乙個位元組是否是符號位元組

///

///

///

private static boolean ismorefspec(byte temp)

else

return ismore;

}

當為第1個描述符位元組時,初始化物件,其他初始化物件過程一樣,看源**就知道:

/// /// 當為第1個描述符位元組時,初始化物件

///

///

///

private static void dategram0(int index, datagramuap datagram)

}

最後再測試一下:

static void main(string args)

;datablock datablock = dateparser(temp);

}

具體到每個資料項的值我還沒有做,不過這個都解析出來了,那後面的也就渣渣吶~~~

SNMP PDU報文格式解析

snmp規定了5種協議資料單元pdu 也就是snmp報文 用來在管理程序和 之間的交換。get request操作 從 程序處提取乙個或多個引數值 網管系統傳送 get next request操作 從 程序處提取緊跟當前引數值的下乙個引數值 網管系統傳送 set request操作 設定 程序的乙...

HTTP的報文格式解析

http報文是面向文字的,報文中每乙個欄位都是一些ascii碼串,各個欄位的長度是不確定的。http有兩類報文 請求報文 響應報文 乙個http請求報文由 四部分組成 a 請求行 請求行由請求方法字段 url欄位和http協議版本字段,組成,它們用空格分隔,例如 get index.html htt...

網路 傳輸層 TCP報文格式解析

1 為了提供可靠的資料傳輸,tcp報文首部欄位有較多的字段,tcp報文格式如下圖 圖2 tcp報文格式 16位源和目標埠 16位 用於多路復用 多路分解來自或送至上層應用的資料,可以這樣理解,埠用來標識同一臺計算機的不同程序。16位源埠號 source port 16 位的源埠字段包含初始化通訊的埠...