2010-05-19 73 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