c#2字节计算校验和

c#2字节计算校验和,c#,checksum,C#,Checksum,我需要一个校验和计算的帮助。 这是(不是我的代码!)但来自规范 private void CalcCheckSum(字符串msg,out byte checksum1,out byte checksum2) { 字节cs1=0; 字节cs2=0; //计算校验和时,始终使用“\n”作为换行符。 msg=msg.Replace(“\r\n”,“\n”);//查找CR LF并将其替换为LF msg=msg.Replace(“\r”,“\n”);//查找CR并将其替换为LF。 for(int i=0

我需要一个校验和计算的帮助。 这是(不是我的代码!)但来自规范

private void CalcCheckSum(字符串msg,out byte checksum1,out byte checksum2)
{
字节cs1=0;
字节cs2=0;
//计算校验和时,始终使用“\n”作为换行符。
msg=msg.Replace(“\r\n”,“\n”);//查找CR LF并将其替换为LF
msg=msg.Replace(“\r”,“\n”);//查找CR并将其替换为LF。
for(int i=0;i
我必须创建这样的数据包:

字符串
是实际数据,我必须计算两个校验和字节(184和62),并将它们插入到最后一个数据包中(如上所示)

但我的计算结果是10和62

var msg = "<!--:Ack:Msg:3:0:-->";
byte checksum1 = 0;
byte checksum2 = 0;
CalcCheckSum(msg, out checksum1, out checksum2);
var msg=”“;
字节校验SUM1=0;
字节校验SUM2=0;
CalcCheckSum(msg,out checksum1,out checksum2);
我现在不知道如何计算正确的校验和值。 这是响应的校验和。不用于验证请求。 我无法上传图像,因为声誉很低,所以请查看规范中的最后一行: 此确认消息独立于请求。只有它必须是对请求消息ID 3的响应

解决方案?


计算校验和后:

checksum1=256-(10+62)=184

checksum2=62


现在设备通信没有问题。

计算校验和后:

checksum1=256-(10+62)=184

checksum2=62

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

也许你应该解释一下语法,告诉我们确切的问题是什么。一个示例输入和输出会有很大帮助。CalcCheckSum是一个函数,它必须以2个字节计算字符串。是一个计算字符串,但我无法在文档中以输出字节(cs1=184,cs2=62)为例。我仍然无法得到它。在上面的示例中,
msg
的预期值和结果
checksum1
checksum2
值是多少?根据BM800的文档,您不是生成传输的校验和的值,而是生成用于验证校验和的值。因此,您的值10和62是正确的。根据文档,您必须应用
checksum1+=transferredChecksum1;checksum2+=checksum1;checksum1+=transferredChecksum2;checksum2+=checksum1
验证校验和。其中checksum1为10,checksum2为62,transferredChecksum1为184,transferredChecksum2为62。如果在该计算之后checksum1和checksum2等于零,则校验和有效。
var msg = "<!--:Ack:Msg:3:0:-->";
byte checksum1 = 0;
byte checksum2 = 0;
CalcCheckSum(msg, out checksum1, out checksum2);