怎麼計算這個checksum
這個是上次有人發的一個招聘資訊裡的面試題, 資訊詳細和網路資料包格式如下, 對於其中的 checksum 不得其解, 哪位高手能解釋一下嗎。
0 4 8 12 +--------+--------+------+=============+ |SEQUENCE|CHECKSUM|LENGTH| DATA | +--------+--------+------+=============+
SEQUENCE 資料包序號(大端序) CHECKSUM (校驗和) 32 位校驗和,計算方式如下:首先將序號和資料拼接在一塊,然後以 32 位為塊,進行迭代異或操作。 第一次迭代時,將第一塊(資料包序號)與第二塊進行異或,第二次迭代時,將第三塊與上次迭代的結果進行異或,以此反覆。 如果 LENGTH 不是 4 的整數倍,需要用 0xAB 填充。 LENGTH 資料片段長度(大端序) DATA 長度為 LENGTH 資料片段
自己寫的 checkSum 函式如下, 沒有成功, 我可能理解錯誤:
func checkSum(msg []byte) bool {
var (
sum uint32
index int = 0
)
if len(msg) <= 12 {
return false
}
seqbuf := bytes.NewReader(msg[0:4])
var seq uint32
err := binary.Read(seqbuf, binary.BigEndian, &seq)
if err != nil {
log.Fatal("binary read error ", err)
}
var dataLen uint32
err := binary.Read(seqbuf, binary.BigEndian, &dataLen)
if err != nil {
log.Fatal("binary read error ", err)
}
length := int(dataLen)
bufReader := bytes.NewReader(msg[4:8])
var checksum uint32
err = binary.Read(bufReader, binary.BigEndian, &checksum)
if err != nil {
log.Fatal("binary read error ", err)
}
/*
if length%4 != 0 {
msg = bytes.Join([][]byte{msg, []byte{0xAB}}, nil)
}
*/
padLen := 4 - length%4
for ; padLen > 0; padLen-- {
msg = append(msg, 0xAB)
}
data := bytes.Join([][]byte{msg[0:4], msg[12 : 12+length]}, nil)
sum = seq ^ uint32(data[index+1])
index += 2
length -= 2
for length > 1 {
sum ^= uint32(data[index])
index += 1
length -= 1
}
if length > 0 {
sum ^= uint32(data[index])
}
//sum += (sum >> 16)
if sum != checksum {
return false
}
return true
}
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 怎麼進入雲端計算這個行業?新手怎麼學習雲端計算?行業
- 怎麼進入雲端計算這個行業?行業
- 怎麼進入雲端計算這個行業?雲端計算學習路線推薦行業
- 計算檔案Checksum的幾種方法
- 計算校驗和工具:Checksum Thing MacMac
- 累計預扣法個稅,怎麼算?(附excel)Excel
- 雲端計算的就業前途怎麼樣?這套雲端計算教程限時領就業
- 網路資料包效驗和(checksum)的計算
- 大模型時代,綠色計算這條路該怎麼走?大模型
- (原創)IP協議Header部分的Checksum計算方法協議Header
- word公式怎麼計算 word公式計算的方法公式
- 雲端計算這個行業前景如何?行業
- 求助!有大佬會計算這個嗎
- excel怎麼自己輸入公式計算 excel怎麼編輯函式進行計算Excel公式函式
- 雲端計算就業前景怎麼樣?linux雲端計算怎麼開始學習就業Linux
- 這個code標籤怎麼回事?
- 雲端計算為什麼這麼火?學習雲端計算費用是多少?
- 【雲端計算】雲端計算四個必學知識看這裡!
- 雲端計算的未來怎麼發展?怎麼學習雲端計算相關技術?
- 好久沒發貼,貼個tip:PE 頭部校驗和(checksum)的計算 (3千字)
- Attachment 這個外掛怎麼用啊?
- 這個演算法怎麼實現???演算法
- 以太坊gas是什麼?gasprice怎麼計算?
- Win10計算器怎麼開啟 開啟win10計算器的2個方法Win10
- 雲端計算開發是什麼?雲端計算的就業前途怎麼樣?就業
- MongoDB 怎麼計運算元查詢MongoDB
- 雲端計算:雲端計算是怎麼分類的?
- 小白怎麼學習雲端計算?雲端計算學習大綱
- 學習雲端計算怎麼入門,如何學習雲端計算?
- 怎麼使用圖片管理這個外掛
- 大家覺得ZK這個框架怎麼樣?框架
- 怎麼取這個JSP裡的值?JS
- 這個聰明哥是怎麼打cf的
- 雲端計算前景如何?大專學歷學習雲端計算怎麼樣?
- 2. 計算機怎麼表示數字計算機
- win10計算器應用商店我們這裡出錯怎麼解決Win10
- 開發者解讀:為什麼螞蟻要用融合計算這種新計算模式?模式
- 雲端計算和大資料那個專業好?雲端計算行業未來發展怎麼樣?大資料行業