byte转化成int
int i = (arrB[3] << 24) + (arrB[2] << 16) + (arrB[1] << 8) + arrB[0];int转化成byte
arrB[3]   =   (byte)(i>>24);   
arrB[2]   =   (byte)(i>>16);   
arrB[1]   =   (byte)(i>>8);   
arrB[0]   =   (byte)i;  有的数据能正确转化如:2031616,但是有的数据不能正确转化如:66650112是不是因为有符号,无符号引起的问题,应该怎么修改,请高手指点一下。

解决方案 »

  1.   

    int i = (char)(arrB[3] << 24)  &  (char)(arrB[2] << 16) & (char)(arrB[1] << 8) & (char)arrB[0];把byte数据转换为无符号数字然后再相与试一下
      

  2.   

    int -〉 bytearrB[3]   =   (byte)((i>>>24)& 0xFF);   
    arrB[2]   =   (byte)((i>>>16)& 0xFF);   
    arrB[1]   =   (byte)((i>>>8)& 0xFF);   
    arrB[0]   =   (byte)(i& 0xFF);
      

  3.   

    我把int的数转化成byte都是正常的,但是转回来得时候就出现问题了。
    2031616能成功,66650112就不能。
    我想是不是
    byte转化成int
    int i = (arrB[3] << 24) + (arrB[2] << 16) + (arrB[1] << 8) + arrB[0];
    这里有问题。
      

  4.   

    to Mailbomb(网络咖啡http://blog.csdn.net/mailbomb你那样好像也不行,值变成0了。
      

  5.   

    int到byte数组的转换有问题的public static void testInt(int integer) throws IOException {
        int arrB[] = new int[4];
        arrB[0] = ( (integer >>> 24) & 0xFF);
        arrB[1] = ( (integer >>> 16) & 0xFF);
        arrB[2] = ( (integer >>> 8) & 0xFF);
        arrB[3] = ( (integer >>> 0) & 0xFF);
        int i = (arrB[0] << 24) + (arrB[1] << 16) + (arrB[2] << 8) + arrB[3];
        if(integer==i){
          System.out.println(integer + ":\t" + i);
        }else{
          System.err.println(integer + ":\t" + i);
        }
      }你看看这个就明白了,这样写就没错
    问题还在符号位的处理