【问题标题】:c# 2 byte calculation checksumc# 2字节计算校验和
【发布时间】:2014-07-08 19:51:15
【问题描述】:

我需要校验和计算方面的帮助。 这是(不是我的代码!)但来自规范 http://www.leupamed.at/?wpdmact=process&did=NC5ob3RsaW5r

private void CalcCheckSum(string msg, out byte checksum1, out byte checksum2)
{
byte cs1 = 0;
byte cs2 = 0;
// Always use "\n" as line break when calculating the checksum.
msg = msg.Replace("\r\n", "\n"); // Find and replace CR LF with LF
msg = msg.Replace("\r", "\n"); // Find and replace CR with LF.
for (int i = 0; i < msg.Length; i++)
{
cs1 += (byte) msg[i];
cs2 += cs1;
}
checksum1 = cs1;
checksum2 = cs2;
}

我必须像这样创建一个数据包:

&lt;!--:Begin:Chksum:1:--&gt;&lt;!--:Ack:Msg:3:0:--&gt;&lt;!--:End:Chksum:1:184:62:--&gt;

字符串&lt;!--:Ack:Msg:3:0:--&gt; 是实际数据,我必须计算两个校验和字节(184 和 62)并将它们插入到最终数据包中(如上所示)。

但我的计算结果是 10 和 62

var msg = "<!--:Ack:Msg:3:0:-->";
byte checksum1 = 0;
byte checksum2 = 0;
CalcCheckSum(msg, out checksum1, out checksum2);

我现在不知道如何计算正确的校验和值。 这是响应的校验和。不用于验证请求。 由于声誉低,我无法上传图片,因此请查看规范中的最后一行:https://drive.google.com/file/d/0B_Gs9q9SJteadVRwSVc1a2FmUTg/edit?usp=sharing 该确认消息独立于请求。只有它必须是对请求消息 ID 3 的响应。

解决方案?

计算校验和后:

校验和1 = 256 - (10 + 62) = 184

校验和2 = 62

设备通信没有问题,现在。

【问题讨论】:

  • 也许您应该解释一下该语法,并告诉我们确切的问题是什么。示例输入和输出会有很大帮助。
  • CalcCheckSum 是必须以 2 个字节计算字符串的函数。 是一个计算字符串,但我不能将输出字节(cs1 = 184,cs2 = 62)作为文档中的示例。
  • 我还是不明白。
  • 在上面的例子中,msg 的期望值和结果 checksum1checksum2 值是多少?
  • 根据 BM800 的文档,您不会生成传输校验和的值,而是生成值以验证校验和。因此,您的值 10 和 62 是正确的。根据文档,您必须申请 checksum1 += transferredChecksum1; checksum2 += checksum1; checksum1 += transferredChecksum2; checksum2 += checksum1; 来验证校验和。其中checksum1为10,checksum2为62,transferChecksum1为184,transferChecksum2为62。如果计算后checksum1和checksum2等于0,则校验和有效。

标签: c# checksum


【解决方案1】:

计算校验和后:

校验和1 = 256 - (10 + 62) = 184

校验和2 = 62

可能这个问题太具体了,没有人有这种校验和计算的经验。 现在设备通信没有问题。

【讨论】:

    猜你喜欢
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 2012-04-07
    相关资源
    最近更新 更多