Heim > Backend-Entwicklung > PHP-Tutorial > 请教这个 crc 16 的java代码怎么转换成php的

请教这个 crc 16 的java代码怎么转换成php的

WBOY
Freigeben: 2016-06-13 12:00:11
Original
945 Leute haben es durchsucht

请问这个 crc 16 的java代码如何转换成php的

本帖最后由 oelenson 于 2014-06-21 12:49:27 编辑 请问这个 crc 16 的java代码如何转换成php的,自己用php 转的代码不对

$str2='AQEBAQEB';
$str2=base64_decode($str2); 


java 代码

public static int CRC16(final byte[] buffer) {<br />		int crc = 0xffff;<br /><br />		for (int i = 0; i < buffer.length; i++) {<br />			crc = ((crc >>> 8) | (crc << 8)) & 0xffff;<br />			crc ^= (buffer[i] & 0xff);<br />			crc ^= ((crc & 0xff) >> 4);<br />			crc ^= (crc << 12) & 0xffff;<br />			crc ^= ((crc & 0xff) << 5) & 0xffff;<br />		}<br />		crc &= 0xffff;<br /><br />		return crc;<br />	}
Nach dem Login kopieren

function uRShift($a, $b)<br />{<br />    if($b == 0) return $a;<br />    return ($a >> $b) & ~(1<<(8*PHP_INT_SIZE-1)>>($b-1));<br />} <br /><br /><br /><br />function crc16($buffer) {<br /> $crc = 0xffff;<br /> for ($i = 0; $i < strlen($buffer); $i++) {<br /> $crc = ((uRShift($crc,8)) | ($crc << 8)) & 0xffff;<br /> $crc ^= ($buffer[$i] & 0xff);<br /> $crc ^= (($crc & 0xff) >> 4);<br /> $crc ^= ($crc << 12) & 0xffff;<br /> $crc ^= (($crc & 0xff) << 5) & 0xffff;<br /> }<br /> $crc &= 0xffff;<br /><br /> return $crc;<br /> }
Nach dem Login kopieren

------解决方案--------------------
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 运行的几组结果
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage