int型數(shù)據(jù)轉(zhuǎn)成byte數(shù)據(jù)時(shí)出現(xiàn)的問(wèn)題
Posted on 2008-08-06 11:47 stonebow 閱讀(2201) 評(píng)論(1) 編輯 收藏 所屬分類: JAVA遇到問(wèn)題int num = 40000;
byte first = num/256;
byte second = num%256;
這樣,只要first或second超過(guò)127,就會(huì)溢出,從而合并起來(lái)的int數(shù)值會(huì)和原數(shù)值不一致。
int input2 = 130;
byte a3 = (byte) input2;
input2 = a3;
System.out.println(input2);
對(duì)于上述代碼,結(jié)果為-126,而不是開始的130,也是溢出的問(wèn)題,所以一定要注意。
解決方法:
第一種:較為不徹底,對(duì)于正整數(shù)來(lái)說(shuō),可以除以127,從而使byte不會(huì)溢出
第二種:轉(zhuǎn)化的時(shí)候按位操作,從而不使用強(qiáng)制轉(zhuǎn)化損失精度:
// 將iSource轉(zhuǎn)為長(zhǎng)度為iArrayLen的byte數(shù)組,字節(jié)數(shù)組的低位是整型的低字節(jié)位
public static byte[] toByteArray(int iSource, int iArrayLen)
{
byte[] bLocalArr = new byte[iArrayLen];
for ( int i = 0; (i < 4) && (i < iArrayLen); i++)
{
bLocalArr[i] = (byte)( iSource>>8*i & 0xFF );
}
return bLocalArr;
}
// 將byte數(shù)組bRefArr轉(zhuǎn)為一個(gè)整數(shù),字節(jié)數(shù)組的低位是整型的低字節(jié)位
public static int toInt(byte[] bRefArr)
{
int iOutcome = 0;
byte bLoop;
for ( int i =0; i<4 ; i++)
{
bLoop = bRefArr[i];
iOutcome+= (bLoop & 0xFF) << (8 * i);
}
return iOutcome;
}