この crc 16 Java コードを php に変換するにはどうすればよいですか? php を使用して変換したコードが間違っています
$str2='AQEBAQEB';$str2=base64_decode($str2); 🎜>
Java コード
------解決策------ -----
1 | 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 で直接 >>
1 | 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 の実行結果をいくつか提供してください