2014-07-08 240 views
-5

我需要幫助完成校驗和計算。 這是(不是我的代碼!)而從規格 http://www.leupamed.at/?wpdmact=process&did=NC5ob3RsaW5rc#2字節計算校驗和

private void CalcCheckSum(string msg, out byte checksum1, out byte checksum2) 
{ 
byte cs1 = 0; 
byte cs2 = 0; 
// Always use "\n" as line break when calculating the checksum. 
msg = msg.Replace("\r\n", "\n"); // Find and replace CR LF with LF 
msg = msg.Replace("\r", "\n"); // Find and replace CR with LF. 
for (int i = 0; i < msg.Length; i++) 
{ 
cs1 += (byte) msg[i]; 
cs2 += cs1; 
} 
checksum1 = cs1; 
checksum2 = cs2; 
} 

我必須創建一個這樣的包:

<!--:Begin:Chksum:1:--><!--:Ack:Msg:3:0:--><!--:End:Chksum:1:184:62:-->

字符串<!--:Ack:Msg:3:0:-->是實際的數據,我必須計算兩個校驗和字節(184和62)並將它們插入最終數據包(如上所示)。

但是從我的計算結果是10和62

var msg = "<!--:Ack:Msg:3:0:-->"; 
byte checksum1 = 0; 
byte checksum2 = 0; 
CalcCheckSum(msg, out checksum1, out checksum2); 

我不現在如何計算正確的校驗值。 這是響應的校驗和。不用於驗證請求。 由於名譽較低,我無法上傳圖片,因此請查看規格中的最後一行:https://drive.google.com/file/d/0B_Gs9q9SJteadVRwSVc1a2FmUTg/edit?usp=sharing 此確認消息根據要求是獨立的。只有它必須是對請求消息ID 3的響應。

解決方案?

計算校驗和之後:

校驗碼1 = 256 - (10 + 62)= 184

校驗碼2 = 62

設備沒有問題的通信,現在。

+1

也許你應該解釋一下這個語法,告訴我們什麼是確切的問題。一個樣本輸入和輸出將會有很大幫助。 –

+0

CalcCheckSum是必須以2個字節計算字符串的函數。 <! - :Ack:Msg:3:0: - >是一個計算出來的字符串,但我不能將輸出字節(cs1 = 184,cs2 = 62)作爲文檔中的示例。 – bisi

+1

我還是不明白。 –

回答

0

計算校驗和之後:

校驗碼1 = 256 - (10 + 62)= 184

校驗碼2 = 62

也許這問題太具體,沒有人具有與這種類型的校驗和的經驗計算。 設備通信沒有問題,現在。