この 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 の実行結果をいくつか提供してください