异或和与零比较的理解

问题描述 投票:0回答:1

我有一些有趣的代码可以批准收到的数据(?)。此代码执行以下操作:

// some recieved data const char data[n] 
unsigned char low = 0;
unsigned char high = 0;
for(int i = 0; i < n; i += 2) {
low ^= data[i];
high ^= data[i+1];
} 

if(low != 0 || high != 0) {
// prints error
return;
}

这里我无法理解这个比较语句的含义。如果它与某个值而不只是零进行比较,那将是显而易见的。为什么 low 和 high 必须等于零才能继续处理接收到的数据。抱歉,问题太简单了,但谷歌和聊天 gpt 没有向我清楚地解释。谢谢。

c++ checksum boolean-logic xor crc
1个回答
1
投票

一条消息的所有字节的

xor
都可以作为校验和。它利用了
a xor a == 0
这一事实。总和由发送方和接收方计算。发件人将他们的校验和添加到消息中。如果接收方计算了
所有
字节(包括校验和)的xor,他们应该得到一个
0
或者消息被破坏了。

© www.soinside.com 2019 - 2024. All rights reserved.