2010-05-19 30 views
1

我想弄清楚如何檢查校驗和。我的消息如下所示:試圖弄清楚如何檢查校驗和

38 0A 01 12 78 96 FE 00 F0 FB D0 FE F6 

F6是校驗和。我將前面的12組轉換爲二進制,然後將它們加在一起。然後嘗試按位操作來應用2s補碼。我得到-1562的值,但我不能將其轉換回十六進制來檢查值是否正確。有人能指引我朝着正確的方向嗎?

我的代碼:

string[] hexValue = {"38", "0A", "01", "12", "78", "96", "FE", "00", "F0", "FB", "D0", "FE"}; 
int totalValue = 0; 
foreach(string item in hexValue) 
{ 
    totalValue += Int32.Parse(item, NumberStyles.HexNumber); 
} 

int bAfter2sC = ~totalValue + 1; 
Console.Write("answer :" + bAfter2sC + "\n"); 
+0

我不認爲你的校驗和算法是正確的。你確定你應該添加它們嗎? – 2010-05-19 15:57:42

+1

GetHashCode()http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx不行嗎?校驗和是你所說的,所以這個算法是正確的。如果傳遞的是同一組十六進制值,則可以判斷其工作方式(以相同的順序 - 如果字節無序,則不是同一個對象)。 – StingyJack 2010-05-19 15:58:51

+2

單字節求和是0x1A,否定爲0xE5。添加一個會產生0xE6,而不是0xF6。 – 2010-05-19 16:05:01

回答

2

Coverting爲十六進制,請使用ToStringbAfter2sC.ToString("X8")

1

我不知道你用的是什麼算法(-1562需要3個字節,而不是兩個),但如何關於使用標準校驗數字算法,如mod 11,也稱爲ISDN 10,記錄爲here:「可以通過將所有產品加在一起然後除以11來非常簡單地進行驗證。」

+0

-1562適合一個兩字節的有符號整數... – 2010-05-19 17:07:59