ホームページ >バックエンド開発 >PHPチュートリアル >この crc 16 java コードを php に変換する方法を教えてください。

この crc 16 java コードを php に変換する方法を教えてください。

WBOY
WBOYオリジナル
2016-06-13 12:00:11951ブラウズ

この 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 />	}

java >>> (ゼロによる左パディングと右シフト) は、php で直接 >>
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 /> }
を変換することはできません。 crc >>> 8) into (($crc > ;> 8) & 0xff)
java の byte[] 型、対応する php データ型はありません 内部のコードをバイトごとに ord($buffer[$i])
$buffer = array_values(unpack('C', $buffer));
unpack('C', $buffer) をすぐに使用することもできます関数を入力すると、返される配列は添字 1 から始まるため、array_values で整理する必要があります
foreach ループまたは 1 から始まる for ループを使用する場合は、整理する必要はありません

その他は何もないはずです

まだ問題があると思われる場合は、Java の実行結果をいくつか提供してください

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。