请教“带进位累加和”的问题,急,分不够再加

malingxian 2007-08-06 08:43:41
最近开发雅讯个人定位设备的管理系统,在分析其通信协议时遇到“带进位累加和”的问题,还望各位大侠帮忙解决,谢谢。

我收到来自设备的一组登录数据,数据如下:
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
...全文
378 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dahei0 2010-02-05
  • 打赏
  • 举报
回复
暴龙 再顶一下!!!
dahei0 2010-02-05
  • 打赏
  • 举报
回复
顶一下!!!
viena 2007-08-07
  • 打赏
  • 举报
回复
我晕~
malingxian 2007-08-07
  • 打赏
  • 举报
回复
讨厌不回答问题而专门接分的行为。那分数就给维也纳好了。
viena 2007-08-06
  • 打赏
  • 举报
回复
倒分?
malingxian 2007-08-06
  • 打赏
  • 举报
回复
虽然你帮顶,啥也没有给我解决,但这100分也得给你了,算你幸运。以后不要帮顶了老兄,这样让人头痛——我也不会再给你加分了。
godgreat 2007-08-06
  • 打赏
  • 举报
回复
沙发,帮忙顶

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧