JavaScript CRC32の計算 >>>符号なし右シフト演算
JavaScriptのビット演算にご用心
C言語のようにビット演算を記述すると想定外の動作になったり
符号なし右シフト演算を活用
(-1)>>>0 = 4294967295(0xffffffff)
JavaScriptのビット演算は32bit
class CRC32{
static table : number[] = [];
constructor(){
if(CRC32.table.length > 0){ return; }
for(let i=0; i<256; ++i){
let r = i;
for(let j=0; j<8; ++j){
if( (r & 1) == 1 ) { r = 0xedb88320^(r>>>1); }
else { r = r >>> 1; }
}
CRC32.table[i] = r >>> 0;
}
}
crc32(data : Uint8Array){
let crc = 0xffffffff;
let tbl = CRC32.table;
for(let o of data){
crc = (crc >>> 8) ^ tbl[(crc ^ o)&0xff];
}
crc = crc^0xffffffff;
return crc >>> 0;
}
}
参考資料
C言語による[最新]アルゴリズム事典 奥村晴彦著(技術評論社)
いいなと思ったら応援しよう!
この記事が役に立ったという方は、サポートお願いします。今後の製作の励みになります。