int型數據轉成byte數據時出現的問題

          Posted on 2008-08-06 11:47 stonebow 閱讀(2201) 評論(1)  編輯  收藏 所屬分類: JAVA遇到問題
           由于byte的表示范圍是-128127,如果使用下面方法轉換將會發生致命的錯誤:

          int num = 40000;

          byte first = num/256;

          byte second = num%256;

          這樣,只要firstsecond超過127,就會溢出,從而合并起來的int數值會和原數值不一致。

           

          int input2 = 130;

          byte a3 = (byte) input2;

          input2 = a3;

          System.out.println(input2);

          對于上述代碼,結果為-126,而不是開始的130,也是溢出的問題,所以一定要注意。

           

          解決方法:

          第一種:較為不徹底,對于正整數來說,可以除以127,從而使byte不會溢出

          第二種:轉化的時候按位操作,從而不使用強制轉化損失精度:

          // iSource轉為長度為iArrayLenbyte數組,字節數組的低位是整型的低字節位

          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數組bRefArr轉為一個整數,字節數組的低位是整型的低字節位

          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;

          }

          Feedback

          # re: int型數據轉成byte數據時出現的問題  回復  更多評論   

          2008-08-06 12:40 by stonebow
          這里面有個問題,就是bLoop & 0xFF的作用,如果不加的話結果會出錯。因為byte轉化為int的時候是按值相等傳遞,所以byte值為10000001的時候,對應的int為1111111111111…111110000001,這樣就會出現問題,這時候&0xFF就會只保留最后實際的8位了。

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 雅安市| 云龙县| 桐柏县| 石林| 江达县| 定远县| 乌兰浩特市| 梅河口市| 五原县| 荆门市| 岗巴县| 呼图壁县| 新闻| 昌平区| 海兴县| 长治市| 荃湾区| 谢通门县| 获嘉县| 合山市| 永城市| 溧水县| 瓦房店市| 兴国县| 榆树市| 得荣县| 辽中县| 中西区| 卢氏县| 谢通门县| 尚志市| 英德市| 沙河市| 南岸区| 清苑县| 崇礼县| 尚志市| 乌兰浩特市| 虞城县| 汕尾市| 成都市|