一直搞不清楚整形變量與字節數組的轉換,看過各位網友的解釋,現寫下此隨筆:
- 整形變量轉換成字節數組
對於int類型變量a,將其轉換為字節數組b,方法如下:
int a = 100; byte[] b = byte[4]; b[3] = (byte)(a & 0xff); b[2] = (byte)(a>>8 & 0xff); b[1] = (byte)(a>>16 & 0xff); b[0] = (byte)(a>>24 & 0xff);
- 字節數組轉換成整形變量
將剛才得到的字節數組b轉換成整形變量a,
int a = 0; for(int i =0; i< b.length; i++){ a += (b[i]&0xff) << (24-8*i); } return a;
java里對於byte變量,假如操作中有int操作數,默認會將byte隱式轉換為int變量,而轉換成的int變量高24位全部為1,在將byte數組轉換為int變量的時候,假如直接用移位操作就會有麻煩,因為高位都是ffffff,所以需將隱式轉換生成的ffffff消掉。因此,將每個字節和0xff相與,然后再移位,最后把各步產生的結果相加即可得到原始的int變量。