主题:谁帮我看看这个java的程序
//虽然这个代码有很多地方都没有看懂 但是我这里只希望先理解两个问题
//下面问题一和问题二告诉我就可以了
private long[] count = new long[2];
private void md5Update(byte[] inbuf, int inputLen) {
//inbuf是一个字符串,inputLen是这个字符串的长度
//比如String类型的"student" inbuf是student的type数组表示形式,inputlen是"student"的长度7
int i, index, partLen;
byte[] block = new byte[64];
index = (int) (count[0] >>> 3) & 0x3F;
/*问题一: 请问这两句下来 最后这个index的值是多少啊
0x3f是一个16进制的数 那么这个数应该是78吧
那么这个count[0]>>>3这是一个二进制的数吧 它怎么可以跟一个16进制的数进行按位与运算的呢
它是先吧这个16进制的数 先转换成二进制的数 然后再进行按位与的运算的吗?
// /* Update number of bits */
if ((count[0] += (inputLen << 3)) < (inputLen << 3))
count[1]++;
//问题二: 请问为什么要这样判断一下呢 ,我的逻辑思维实在有点乱套,请高手解答
count[1] += (inputLen >>> 29);
partLen = 64 - index;
// Transform as many times as possible.
if (inputLen >= partLen) {
md5Memcpy(buffer, inbuf, index, 0, partLen);
md5Transform(buffer);
for (i = partLen; i + 63 < inputLen; i += 64) {
md5Memcpy(block, inbuf, 0, i, 64);
md5Transform(block);
}
index = 0;
} else
i = 0;
// /* Buffer remaining input */
md5Memcpy(buffer, inbuf, index, i, inputLen - i);
}
//下面问题一和问题二告诉我就可以了
private long[] count = new long[2];
private void md5Update(byte[] inbuf, int inputLen) {
//inbuf是一个字符串,inputLen是这个字符串的长度
//比如String类型的"student" inbuf是student的type数组表示形式,inputlen是"student"的长度7
int i, index, partLen;
byte[] block = new byte[64];
index = (int) (count[0] >>> 3) & 0x3F;
/*问题一: 请问这两句下来 最后这个index的值是多少啊
0x3f是一个16进制的数 那么这个数应该是78吧
那么这个count[0]>>>3这是一个二进制的数吧 它怎么可以跟一个16进制的数进行按位与运算的呢
它是先吧这个16进制的数 先转换成二进制的数 然后再进行按位与的运算的吗?
// /* Update number of bits */
if ((count[0] += (inputLen << 3)) < (inputLen << 3))
count[1]++;
//问题二: 请问为什么要这样判断一下呢 ,我的逻辑思维实在有点乱套,请高手解答
count[1] += (inputLen >>> 29);
partLen = 64 - index;
// Transform as many times as possible.
if (inputLen >= partLen) {
md5Memcpy(buffer, inbuf, index, 0, partLen);
md5Transform(buffer);
for (i = partLen; i + 63 < inputLen; i += 64) {
md5Memcpy(block, inbuf, 0, i, 64);
md5Transform(block);
}
index = 0;
} else
i = 0;
// /* Buffer remaining input */
md5Memcpy(buffer, inbuf, index, i, inputLen - i);
}