long b=99999999999999999L轉(zhuǎn)換成byte[]后再轉(zhuǎn)回來對不上
public?class?Binary?{ ????//將byte[]轉(zhuǎn)換成long ????public?long?byte2Long(byte[]?arr){ ????????long?num?=?0; ????????for?(int?i=?0;?i?<?8;?i++)?{ ????????????num?+=?(long)((arr[i]&0xff)<<i*8)?; ????????} ????????return?num; ????} ?????//將long轉(zhuǎn)換成byte[] ????public?byte[]?long2Byte(long?b){ ????????byte[]?bytes=new?byte[8]; ????????for?(int?i?=?0;?i?<?8;?i++)?{ ????????????bytes[i]=(byte)((b>>i*8)&0xff); ????????} ????????return?bytes; ????} ????public?static?void?main(String[]?args)?{ ????????Binary?test=new?Binary(); ????????long?b=?99999999999999999L; ????????byte[]?bytes=test.long2Byte(b)?; ????????System.out.println(Arrays.toString(bytes)); ????????System.out.println(test.byte2Long(bytes)); ????} }
轉(zhuǎn)回來變成了1592608119
2018-11-30
long類型的數(shù)不是有值域范圍嘛,你這個明顯超出范圍了啊
2019-03-17
過了一段時間回過頭來看,在第7行與第8行之間插入 System.out.println(num);
發(fā)現(xiàn)打印出來的數(shù)據(jù)分別是:
255
65535
9043967
1569325055
1569325175
1569342839
1575830903
1592608119
然后我把第7行改成 num+=(long)(arr[i]&0xff)<<i*8;
結(jié)果就對了.
經(jīng)分析byte是4字節(jié)的,最多只能左移4位,超過4位就會造成數(shù)據(jù)丟失,要先轉(zhuǎn)換成long才能左移8位;