一段16进制的数据求和

离开江湖 发布于 2015/06/04 15:52
阅读 1K+
收藏 0
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





加载中
1
filecache
filecache
你需要问到解包规则才能解析这个吧.. 例如开始结束符,  数据字段, 校验位什么的..
离开江湖
离开江湖
数据字段 D0 44 00 05 00 09 03 02 00 00 00 00 校验值27
0
firstrose
firstrose
没错啊,你想表达什么意思呢
离开江湖
离开江湖
我想求这个算法,因为我没算出来。。。
0
温习江湖
温习江湖

拆开求和呗。

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

0
离开江湖
离开江湖

我算出来了

<?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



返回顶部
顶部