一段16进制的数据求和

一段16进制的数据求和

韬韬不绝 发布于 2021-11-26 字数 848 浏览 659 回复 6

D0 44 00 05 00 09 03 02 00 00 00 00 27 0D

这段代码是PHP通过TCP获取的数据

bin2hex以后,输出的

27是校验用的值 

要把27前面的数据求和,=27才能通过,!=27的话,就要放弃这段

对方给的思路
因为每个字节是8位,所以求和只要后8位,前面的不要

把27前面的数据相加,然后取后8位

我算出来了

<?php
$string = 'D0 44 00 05 00 09 03 02 00 00 00 00';
$arr = explode(' ',$string);
$sum = 0;
for($i=0;$i<$len;$i++){
    $sum+=hexdec($arr[$i]); //先转成10进制相加
}
$sum = base_convert((string)$sum,10,16); //再转成16进制 = 127
//取后面两位
echo substr($sum,-2); // = 27

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

德意的啸 2021-12-01 6 楼

我算出来了

<?php
$string = 'D0 44 00 05 00 09 03 02 00 00 00 00';
$arr = explode(' ',$string);
$sum = 0;
for($i=0;$i<$len;$i++){
    $sum+=hexdec($arr[$i]); //先转成10进制相加
}
$sum = base_convert((string)$sum,10,16); //再转成16进制 = 127
//取后面两位
echo substr($sum,-2); // = 27

睫毛上残留的泪 2021-12-01 5 楼

拆开求和呗。

其实我是看到你的昵称过来的

甜柠檬 2021-12-01 4 楼

我想求这个算法,因为我没算出来。。。

凯凯我们等你回来 2021-12-01 3 楼

没错啊,你想表达什么意思呢

緦唸λ蓇 2021-12-01 2 楼

数据字段 D0 44 00 05 00 09 03 02 00 00 00 00 校验值27

永不分离 2021-12-01 1 楼

你需要问到解包规则才能解析这个吧.. 例如开始结束符,  数据字段, 校验位什么的..