请教“带进位累加和”的问题,急,分不够再加
最近开发雅讯个人定位设备的管理系统,在分析其通信协议时遇到“带进位累加和”的问题,还望各位大侠帮忙解决,谢谢。
我收到来自设备的一组登录数据,数据如下:
7E-03-0C-04-01-31-31-31-31-31-31-01-01-0F-31-33-38-36-33-38-38-34-34-34-38-20-20-20-20-7E
按照通信协议中写的数据结构分解为:
数据结构为:[0x7E|版本号(1)|校验(1)|优先级(1)|类型(1)|数据(n)|0x7E]
数据头:7E
版本号:03
校验和:0C
优先级:04
类型 :01
数据 :31-31-31-31-31-31-01-01-0F-31-33-38-36-33-38-38-34-34-34-38-20-20-20-20
数据尾:7E
在协议中校验和的计算方法如下:
---------------------------------------------------
从版本号到数据字段的各个字节的带进位累加和,累加完后将该字节最高位清零,如最终结果为0,则转义为7FH。计算时,先将校验和字段填0x00,计算后,再将校验和写入该字段。
---------------------------------------------------
但是我死活计算不出这个数值为0C的校验和来,还请大家帮忙。
下面是我计算校验和的代码:
''' <summary>
''' 获取校验和
''' </summary>
''' <param name="Data"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function GetCheckSum(ByVal Data As Byte(), Optional ByVal StartIndex As Integer = 0, Optional ByVal Length As Integer = -1, Optional ByVal CheckIndex As Integer = -1) As Byte
If Data Is Nothing Then Return 0
Dim chk As Byte
Dim cj As Long
For i As Integer = StartIndex To Math.Min(Data.Length, Length + StartIndex) - 1
If i <> CheckIndex Then
cj = (cj + Data(i)) And &HFF
End If
Next
cj = cj And &HFF
chk = CByte(cj)
Return chk
End Function