理解异或和与零的比较

Understanding of xor sum comparing with zero

提问人:Николай Шлиппе 提问时间:2/20/2023 最后编辑:Николай Шлиппе 更新时间:2/20/2023 访问量:101

问:

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

// 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++ 校验和 布尔逻辑 xor CRC

评论

1赞 Scheff's Cat 2/20/2023
如果没有更多的背景,很难说。也许,最后两个字节是某种检查代码,以便在数据未损坏的情况下将累积值归零。
0赞 samnoon 2/20/2023
欢迎来到 Stackoverflow!请添加有关您尝试解决的特定问题的更多描述。否则就很难回答了。
0赞 Frodyne 2/20/2023
我不确定我是否理解问题所在。你对一些产生某些特定值的异或链很好,但当该值为 0 时就不行了?你知道这意味着吗?或者换句话说,任何值 XOR 本身都是零。a ^ b == c(a ^ b) ^c == 0
0赞 molbdnilo 2/20/2023
一定是这样,因为发送的数据就是这样构造的。
1赞 Scheff's Cat 2/20/2023
它看起来像奇偶校验字节或奇偶校验字。(我知道我过去已经见过这样的事情了......;-)

答:

4赞 463035818_is_not_an_ai 2/20/2023 #1

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

评论

1赞 rcgldr 2/21/2023
从技术上讲,代码 xor 的 16 位字,而不是 8 位字节,并假设这是一个偶数。n