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);

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

感谢观看文章,

相关推荐
灰子学技术1 小时前
Envoy TCP 层面的 Metric 指标分析
开发语言·网络·网络协议·tcp/ip·php
Johnstons1 小时前
TCP Reset(RST)异常是什么?一文讲透连接被动中断的识别方法、适用场景、与超时断开的边界及排查清单
网络协议·tcp/ip·php·es·抓包分析
REDcker11 小时前
Linux信号机制详解 POSIX语义与内核要点 sigaction与备用栈实践
linux·运维·php
REDcker13 小时前
浏览器端Web程序性能分析与优化实战 DevTools指标与工程清单
开发语言·前端·javascript·vue·ecmascript·php·js
云云只是个程序马喽15 小时前
AI漫剧创作系统开发定制指南
人工智能·小程序·php
niucloud-admin1 天前
PHP V6 单商户常见问题——云编译报错处理
php
xxjj998a1 天前
Laravel 1.x:PHP框架的原始魅力
android·php·laravel
xxjj998a1 天前
Laravel 5.x版本核心特性全解析
php·laravel
魔极客1 天前
第十二节:龙晰 AnolisOS-23.4-x86_64.qcow2 虚拟机的网络配置方式及 ssh 连接
网络·ssh·php
dog2502 天前
圆锥曲线和二次曲线
开发语言·网络·人工智能·算法·php