代码里面可以看出,编码为Unicode,非Ascii字符双字节; var Crc32 = (function(){var Crc32Table=[], map_hex2 = [];function MakeTable(){ var i,j,crc; for (i = 0; i 256; i++) { crc = i; for (j = 0; j 8; j++) { if (crc 1) crc =
var Crc32 = (function(){
var Crc32Table=[], map_hex2 = [];
function MakeTable()
{
var i,j,crc;
for (i = 0; i < 256; i++)
{
crc = i;
for (j = 0; j < 8; j++)
{
if (crc & 1)
crc = (crc >>> 1) ^ 0xEDB88320;
else
crc >>>= 1;
}
Crc32Table[i] = crc;
map_hex2.push(('0' + i.toString(16)).slice(-2));
}
}
function __initlize(csData)
{
if(!csData){
return '';
}
var crc = 0xffffffff, len = csData.length, i=0;
var chr = 0;
for(var i = 0; i < len; i++)
{
chr = csData.charCodeAt(i);
if(chr <= 0xff){
crc = (crc >>> 8) ^ Crc32Table[(crc ^ chr) & 0xff ];
}else{
crc = (crc >>> 8) ^ Crc32Table[(crc ^ ((chr >>> 2) & 0xff)) & 0xff ];
crc = (crc >>> 8) ^ Crc32Table[(crc ^ (chr & 0xff)) & 0xff ];
}
}
return word2hex(crc ^ 0xffffffff);
}
function word2hex(word){
return map_hex2[word>>>24] +
map_hex2[(word>>16) & 0xff] +
map_hex2[(word>>8) & 0xff] +
map_hex2[word & 0xff];
}
MakeTable();
return __initlize;
})();
示例
console.log(Crc32('test'));
