2 qq 33159419 qq_33159419 于 2016.05.11 16:36 提问

求大神帮读js代码,急!急!急!急!急!

function str2blks_MD5(str)
{
nblk = ((str.length + 8) >> 6) + 1;
blks = new Array(nblk * 16);
for(i = 0; i < nblk * 16; i++) blks[i] = 0;
for(i = 0; i < str.length; i++)
blks[i >> 2] |= str.charCodeAt(i) << ((i % 4) * 8);
blks[i >> 2] |= 0x80 << ((i % 4) * 8);
blks[nblk * 16 - 2] = str.length * 8;
return blks;
}
这是我直接复制过来的代码,由于没弄懂,缩进什么的我就不乱动了;按理说没有{}的循环不是只有一个循环体的吗,我这段代码第二个for循环怎么有两个循环体的,是怎么回事的,求解。望大神指教,谢谢

3个回答

showbo
showbo   Ds   Rxr 2016.05.11 16:57

不加{}就只有一句


    function str2blks_MD5(str) {
        nblk = ((str.length + 8) >> 6) + 1;
        blks = new Array(nblk * 16);
        for (i = 0; i < nblk * 16; i++) blks[i] = 0;
        for (i = 0; i < str.length; i++)
            blks[i >> 2] |= str.charCodeAt(i) << ((i % 4) * 8);
        blks[i >> 2] |= 0x80 << ((i % 4) * 8);
        blks[nblk * 16 - 2] = str.length * 8;
        return blks;
    }
showbo
showbo 回复小李肥肥: 为i的最大值,就是str.length的值
一年多之前 回复
qq_33159419
qq_33159419 啊?那blks[i >> 2] |= 0x80 << ((i % 4) * 8)种的i是哪个呢 ?谢谢
一年多之前 回复
CSDNXIAON
CSDNXIAON   2016.05.11 16:42
bdmh
bdmh   Ds   Rxr 2016.05.11 16:47

这没什么,就是做位运算,最后得到一个类似Md5的值

qq_33159419
qq_33159419 恩恩,我想问的是这个循环是怎么跑的,麻烦帮我看下,谢谢
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!