php实现CRC校验 适用于MODBUS协议

php 复制代码
function CRC16($string)
    {
        $crcBytes = [];
            for ($i = 0; $i < strlen($string); $i += 2) {
                $crcBytes[] = hexdec(substr($string, $i, 2));
            }
            $crc = 0xFFFF;
            $polynomial = 0xA001;  // This is the polynomial x^16 + x^15 + x^2 + 1
    
            foreach ($crcBytes as $byte) {
                $crc ^= $byte;
                for ($i = 0; $i < 8; $i++) {
                    if ($crc & 0x0001) {
                        $crc = (($crc >> 1) ^ $polynomial) & 0xFFFF;
                    } else {
                        $crc >>= 1;
                    }
                }
            }
            return $crc;
    }

调用

php 复制代码
$ru = $this->CRC16($str2);

我对接MODBUS 协议 最后校验位是需要 转16进制后 调换位置

php 复制代码
 $ru = str_pad(dechex($ru), 4, '0', STR_PAD_LEFT);
 $str2 = $str2.substr($ru,-2).substr($ru,0,2);

相当于 后两位在前 , 前两位在后

感谢观看文章,

相关推荐
Q_Q19632884756 小时前
python+django/flask基于深度学习的个性化携程美食数据推荐系统
spring boot·python·深度学习·django·flask·node.js·php
Q_Q5110082858 小时前
python+django/flask的篮球馆/足球场地/运动场地预约系统
spring boot·python·django·flask·node.js·php
Q_Q5110082858 小时前
python+django/flask的城市供水管网爆管预警系统-数据可视化
spring boot·python·django·flask·node.js·php
悠悠~飘9 小时前
php基础-系统函数-第15天
php
laocaibulao21 小时前
mac电脑composer命令如何指定PHP版本
macos·php·composer
zz-zjx21 小时前
云原生LVS+Keepalived高可用方案(二)
开发语言·php·lvs
网络精创大傻21 小时前
PHP 与 Node.js:实际性能对比
开发语言·node.js·php
KevinLyu21 小时前
PHP内核详解· 内存管理篇(七)· 调整内存块大小
php
hj10431 天前
php上传企业微信附件的方法
开发语言·php·企业微信
游九尘1 天前
在 PHP 中打印数据(调试、输出内容)
php