【问题标题】:XOR of all characters - what does it mean?所有字符的异或 - 这是什么意思?
【发布时间】:2020-02-11 00:25:48
【问题描述】:

我需要通过以太网(套接字连接)向设备发送一个字符串。有一个起始位、一个消息内容、一个结束位和一个校验和。校验和被描述为“所有字符的异或”。

我不明白这是什么意思。这是什么意思,如何用 PHP 生成它?

【问题讨论】:

  • 使用对每个字符执行$checksum ^= $char 的循环。
  • StackOverflow 不是免费的编码服务。你应该try to solve the problem first。请更新您的问题以在minimal reproducible example 中显示您已经尝试过的内容。如需更多信息,请参阅How to Ask,并拨打tour :)
  • 我没有要求编码答案。我问过有人在官方文档中写的措辞的澄清,以及一种方法,而不是代码。
  • "所有字符的异或";引用的 php 文档说“如果 $a 或 $b 为 TRUE,但不是两者都为 TRUE,则为 TRUE。”。我以前也发现过,但我不明白一个角色是真还是假。任何角色都不会是真的吗?

标签: php xor


【解决方案1】:

校验和是在发送时根据您的输入生成的代码 以便接收方可以使用它来检查数据是否有错误(接收方将生成自己的校验和并将其与您的进行比较,并在它们不匹配时引发错误或其他东西)。

试试这个返回 XOR 校验和的方法:

function GetCheckSum($str)
{
  $r = 0;
  for ($i = 0; $i < strlen($str); $i++) {
    $o = ord(substr($str, $i, 1));
    $r = $r ^ $o;
  }
  return $r;
}

如果它对您不起作用,可能将 return $r; 更改为 return dechex($r); 会有所帮助(将十进制转换为十六进制)。

【讨论】:

    猜你喜欢
    • 2015-09-12
    • 2018-05-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 2011-12-06
    • 2010-10-03
    相关资源
    最近更新 更多