【问题标题】:PHP XOR ChecksumPHP XOR 校验和
【发布时间】:2015-03-20 01:31:39
【问题描述】:

我有以下字符串需要对其进行校验和。我将如何在 PHP(或函数)中编写逻辑来实现这一点。这是我从文档中获得的一个示例。

1字节,是异或校验和,例如: 如果数据包是:29 29 B1 00 07 0A 9F 95 38 0C 82 0D 0x82= 29 xor 29 xor B1 xor 00 xor 07 xor 0A xor 9F xor 95 xor 38 xor 0C

在上面的字符串中,29 29 B1 00 07 0A 9F 95 38 0C (82) 0D 是生成的校验和。

【问题讨论】:

  • 这个问题信息有点少。你能分享一下你尝试过的,你遇到了什么问题吗?

标签: php checksum xor


【解决方案1】:

所有运营商都在这里:http://php.net/manual/en/language.operators.bitwise.php

但是

$a ^ $b

就是你要找的

【讨论】:

    【解决方案2】:

    我得到了以下工作,它给出了正确的校验和 (130, 0x82),所以它很有希望......您可以连接以下一些语句以获得稍微更好的性能,为了便于阅读,我将操作分开。

    <?php
    
    // Input string. Checksum to be generated over the first 10 elements. 
    $string = '29 29 B1 00 07 0A 9F 95 38 0C 82 0D';
    
    // Initial checksum
    $checksum = 0;
    
    // Split into chunks and process first 10 parts
    $parts = explode(' ', $string, 11);
    for ($i = 0; $i < 10; $i++) {
        $part = $parts[$i];
        $nr = hexdec($part);
        $checksum ^= $nr;
    }
    
    // Done, bring back checksum into 0..0xff range
    $checksum &= 0xff;
    echo "Got checksum: ", $checksum, "\n";
    
    ?>
    

    【讨论】:

    • 这是完美的。稍作调整以获得正确的数据。
    猜你喜欢
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 2018-06-27
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    相关资源
    最近更新 更多