1、對於常理說& 0xFF是沒有改變byzheng 的疑問
for(byte by : byMd5){
String i = Integer.toBinaryString(by);
int byzheng = by;
byzheng =
by & 0xFF;
if(byzheng > 0x10){
stringBuffer.append("0");
}
stringBuffer.append(Integer.toHexString(by & 0xFF));
}
這裏我驗證了,當by是-80的時候,int byzheng = by 這裏的byzheng依舊是-80,而byzheng = by & 0xFF確是80,這是因爲,第一個是直接傳值,而第二個是講-80的二進制&,雖然與0xFF取與並沒有變化,但是賦值給byzheng 的時候,是將二進制轉換爲十進制的,所以數值開始發生變化。
以下是數值的變化過程:
by = -80;
(二進制)by = 01010000(這是80,再取反加一得到-80)=10110000
(二進制)0xFF = 11111111
by & 0xFF
10110000
&
11111111
//取與,上下都等於1的時候,纔是1,其餘爲0,所以:
結果:10110000(沒變)
再將10110000轉爲十進制等於176
所以下面的byzheng = by & 0xFF 是等於176,而上面的等於-80
MD5這裏的做法就是爲了取正數
2、對於爲什麼要小於0x10的時候加0的疑問
因爲這裏是保證兩位,十六進制的0x10就是十進制的16,當小於16的時候,對於16進制來說,就是一位數,顯然是少了一位的,所以爲了保證都是兩位的數,在此之前加上1位0作爲填充
可以自行代碼調試看看!不足之處,請糾正!