int a = 18874624;
int mask = 0xFF;
// 保存转换字节数组
byte[] index = new byte[4];
// 转换每2字节的结果
for (int i = 0; i < 4; i++) {
   index[i] = (byte) ((a >> i * 8) & mask);
}
 String s1 = new String(index);
 System.out.println(s1);
打印出来的s1乱码了。按理说应该打印出18874624吧。

解决方案 »

  1.   

    lz你理解的有误,转换的时候你把int转成了byte[],是算术转换,那么反转的时候,应该用:
    int result = index[0] + (index[1]>>8) + (index[1]>>16) + (index[1]>>24);
    来反转...你要想用new String()来反转,那要用
    (a+"").getBytes()
    来换转
      

  2.   

    写了点代码,楼主参考一下。public class CsdnCal
    {
    public static void main(String[] args)
    {
    //int a = 18874624; //楼主这个数特殊,16进制是0x1200100。
    //int a=10526880;
    int a=147504615; //16进制是0x8CABDE7。 int mask = 0xFF;
    // 保存转换字节数组
    byte[] index = new byte[4];
    // 转换每2字节的结果
    for (int i = 0; i < 4; i++)
            {
    index[i] = (byte) ((a >> i * 8) & mask);
    }
    int x=0;
    for(int i=0,len=index.length;i<len;i++) //把字节数组数据还原成原数。
    {
    x=x*(0x100)+changeByteToInt(index[len-1-i]);
    }
      System.out.println("x is  "+x);
    /** 字符型办法。
     * 把每位数转换成一个ascii字符,放入byte数组。
     */
    int b=147504615; //16进制是0x8CABDE7。
    String strA=String.valueOf(b); //先变成字符串形式,求出长度。
    int length=strA.length();
    byte[] by=new byte[length]; //定义一个数位刹那高度的byte数组。
    for(int i=length-1;i>=0;i--) //把每一位转成字符。
    {
    by[i]=(byte)(b%10+'0'); //转换ascii码了。
    b=b/10;
    }
    String strB=new String(by);
    System.out.println(strB);
    }
    /** 把一个字节数据转换成正的整数的方法。
     * 字节数大于128<255,java 都任成负数了。不能直接计算。
     */
    public static int changeByteToInt(byte b)
    {
    return b<0?0x80+0x7f&b:b; //小于128直接输出,大于的话转换一下。
    }
    }