Visual Basic 中的校验和计算

Posted

技术标签:

【中文标题】Visual Basic 中的校验和计算【英文标题】:Checksum calculation in visual basic 【发布时间】:2015-08-19 20:47:45 【问题描述】:

我想与医疗分析仪通信并向其发送一些消息。但是分析器会在消息末尾请求一个控制字符或校验和来验证它。

请原谅我的英语知识有限,但根据手册,这是计算校验和的方法:

控制字符是排除逻辑和(异或),以字符为单位,从文本的开头到文本的结尾,由一个 1 字节的二进制组成。另外,由于这个控制字符是十六进制的00~7F的值,所以请不要误认为是传输中使用的控制码。

那么请你告诉我如何根据这些信息获得这个控制字符。由于我的英语有限,我不太了解所写的内容。

我正在使用 Visual Basic 进行编程

谢谢

【问题讨论】:

【参考方案1】:

该手册的英文也不是很好。我的理解:

您将发送到设备的消息可以表示为字节数组。您希望将每个字节异或在一起,这将为您留下一个字节校验和,以添加到消息的末尾。 (字节 1 XOR 字节 2 XOR 字节 3 XOR ....)

“Moreover”之后的所有内容似乎都在说“如果您正在从设备读取,最后一个字符是校验和,而不是命令,所以不要将其视为命令,即使它看起来像一个。”。您正在写入设备,因此您可以忽略该部分。

异或(记住我不懂VB):

有一个校验和变量,设置为 0。循环遍历消息的每个字节,并将校验和变量与该字节进行异或。将结果存储回校验和中。

【讨论】:

我们需要在一个命令行中对所有字节数组进行异或吗?如果是这样,你知道怎么做吗?因为我们事先并不知道字符串的确切长度。 添加了有关该位的更多详细信息。

以上是关于Visual Basic 中的校验和计算的主要内容,如果未能解决你的问题,请参考以下文章

PAT Basic 1031

什么是校验和?

更新分段数据包中的UDP校验和

c_cpp 对于输入二进制文件中的每个512字节,计算16位校验和并将校验和写为512字节作为第512个字节

如何计算IP或ICMP协议首部里的checksum字段

手动更改后重新计算 SVN 转储中的校验和