请问这个 crc 16 的java代码如何转换成php的 本帖最后由 oelenson 于 2014-06-21 12:49:27 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 java 的 >>> (左补0右移) 在 php 中不需特殊处理,可直接 >>至多将 (crc >>> 8) 译为 (($crc >> 8) & 0xff) java 的 byte[] 类型,没有对应的 php 数据类型你可以逐字节取内码 ord($buffer[$i]) 也可以一进函数就 $buffer = array_values(unpack('C', $buffer));unpack('C', $buffer) 返回的数组是从下标 1 开始的,所以要 array_values 整理一下如果用 foreach 循环,或 for 循环从 1 开始就不需要整理了其他应该没什么了如果觉得还有问题,请给出 java 运行的几组结果 $str2='AQEBAQEB';$str2=base64_decode($str2); java 得到的 结果是 8357php 得到的结果是 33653<?phpfunction crc16($buffer) { $crc = 0xffff; //$buffer = array_values(unpack('C', $buffer)); for ($i = 0; $i < strlen($buffer); $i++) { $crc = ((($crc >> 8) & 0xff) | ($crc << 8)) & 0xffff; $crc ^= (ord($buffer[$i]) & 0xff); $crc ^= (($crc & 0xff) >> 4); $crc ^= ($crc << 12) & 0xffff; $crc ^= (($crc & 0xff) << 5) & 0xffff; } $crc &= 0xffff; return $crc;}$str=base64_decode('AQEBAQEBdYM=');$str2='AQEBAQEB';$str2=base64_decode($str2);$arr2=unpack('H*',$str2);$arr=unpack('H*',$str);print_r($arr);echo '-----------------------------------';echo crc16($str2); 为什么要 $str2=base64_decode($str2); java 里也做了 base64 编码了吗?让你多给几组,为何只给一组呢? IIS5.0+PHP5.2+MYSQL+PHPMyAdmin 数据出错怎么处理 php伪静态 如何将调用的COM组件在不同的PHP页面都能调用? 哪位大侠知道PHP使用RS232串口通讯传送文件 帮助写一个小正则 zabbix的开发! 有没有XML的格式化输出的通用的程序? 修改ucenter/control/user.php的问题。 求助一个关于DZ论坛回帖类的问题。 求帮看下这段PHP下载MP4文件的问题,文件下载不完整 ==========NetBeans IDE php 8.0 UTF8编码的问题======= 编写一个位置服务信息系统
至多将 (crc >>> 8) 译为 (($crc >> 8) & 0xff) java 的 byte[] 类型,没有对应的 php 数据类型
你可以逐字节取内码 ord($buffer[$i])
也可以一进函数就 $buffer = array_values(unpack('C', $buffer));
unpack('C', $buffer) 返回的数组是从下标 1 开始的,所以要 array_values 整理一下
如果用 foreach 循环,或 for 循环从 1 开始就不需要整理了其他应该没什么了如果觉得还有问题,请给出 java 运行的几组结果
$str2='AQEBAQEB';
$str2=base64_decode($str2);
java 得到的 结果是 8357
php 得到的结果是 33653
<?php
function crc16($buffer) {
$crc = 0xffff;
//$buffer = array_values(unpack('C', $buffer)); for ($i = 0; $i < strlen($buffer); $i++) {
$crc = ((($crc >> 8) & 0xff) | ($crc << 8)) & 0xffff;
$crc ^= (ord($buffer[$i]) & 0xff);
$crc ^= (($crc & 0xff) >> 4);
$crc ^= ($crc << 12) & 0xffff;
$crc ^= (($crc & 0xff) << 5) & 0xffff;
}
$crc &= 0xffff; return $crc;
}
$str=base64_decode('AQEBAQEBdYM=');
$str2='AQEBAQEB';
$str2=base64_decode($str2);
$arr2=unpack('H*',$str2);
$arr=unpack('H*',$str);
print_r($arr);
echo '-----------------------------------';
echo crc16($str2);
java 里也做了 base64 编码了吗?让你多给几组,为何只给一组呢?