无法理解一段代码~~~~~~~~~~~ http://www.iecn.net/bbs/view/100141.html 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 str.length()不是字节数,而是字符数。 这是md5中的补位并形成n个512位的数组项数组的方法,可我怎么也理解不了第一句条件是,让传进来的str满足N*512+448位,即N*64+56字节,即(N+1)*64-8字节。不足的位先补一个1然后补n个0。java中一个字符是两个字节,那么一个str的字节长度就是两倍的strlen于是我怎么也理解不了这句:int nblk = ((str.length() + 8) >> 6) + 1;怎么不是int nblk = ((str.length() + 4) >> 5) + 1;呢?大家帮帮忙吧~下面是这个方法的源码。 private int[] str2blks_MD5(String str) { int nblk = ((str.length() + 8) >> 6) + 1; int[] blks = new int[nblk * 16]; int i = 0; for (i = 0; i < nblk * 16; i++) { blks[i] = 0; } for (i = 0; i < str.length(); i++) { blks[i >> 2] |= str.charAt(i) << ((i % 4) * 8); } blks[i >> 2] |= 0x80 << ((i % 4) * 8); blks[nblk * 16 - 2] = str.length() * 8; return blks; } 我想你的问题在这“java中一个字符是两个字节,那么一个str的字节长度就是两倍的strlen”String s ="123"; s.length()是3 String s = "我"; s.length()是1 正因为是字符数而不是字节数,同时我也知道是unicode我才觉得那句怪异 swing组件无法立即显示的问题 关于成员初始化 若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。为什么只有数值右端的低5位才有用? JAVA播放视频流 200分 求解,顶也有分 这个怎么理解? JAVA中调用PL/SQL的问题.很急!!! 再做不出来就要被解雇啦,大家帮忙啊 怎么把双精度转化成整型~~~谢谢... 用zxing生成二维码的问题,求帮助 谁用过 JBuilder 如何在GUI中打开.jsp网页? 新手提问
于是我怎么也理解不了这句:
int nblk = ((str.length() + 8) >> 6) + 1;
怎么不是
int nblk = ((str.length() + 4) >> 5) + 1;
呢?
大家帮帮忙吧~下面是这个方法的源码。
int nblk = ((str.length() + 8) >> 6) + 1;
int[] blks = new int[nblk * 16];
int i = 0;
for (i = 0; i < nblk * 16; i++) {
blks[i] = 0;
}
for (i = 0; i < str.length(); i++) {
blks[i >> 2] |= str.charAt(i) << ((i % 4) * 8);
}
blks[i >> 2] |= 0x80 << ((i % 4) * 8);
blks[nblk * 16 - 2] = str.length() * 8; return blks;
}
String s ="123"; s.length()是3
String s = "我"; s.length()是1
我才觉得那句怪异