result[3] = (byte) (a >> 24 & 0xff);
result[2] = (byte) (a >> 16 & 0xff);
result[1] = (byte) (a >> 8 & 0xff);
result[0] = (byte) (a & 0xff);

解决方案 »

  1.   

    右移24位后取低八位如果是强制转换成byte,不用& 0xff应该也能达到效果吧
      

  2.   

    顶顶!
    byte本身只有8位
    所以不用& 0xff 取后8位 应该也能达到所要的效果
      

  3.   

    将int类型变量 a 转成 byte[]
      

  4.   

    兄弟们,都辛苦了.
    但是,还不是我想要的答案,可以我没有描述情况.
    下面四句话,是表示高位优先.
    result[3] = (byte) (a >> 24 & 0xff);
    result[2] = (byte) (a >> 16 & 0xff);
    result[1] = (byte) (a >> 8 & 0xff);
    result[0] = (byte) (a & 0xff);
    目前,我有点比较模糊,为什么都是24 16 8 0 呢.
    他们之间都是减8,一个字节.
      

  5.   

    兄弟们,都辛苦了.
    但是,还不是我想要的答案,可能我没有描述清楚.
    下面四句话,是表示高位优先.
    result[3] = (byte) (a >> 24 & 0xff);
    result[2] = (byte) (a >> 16 & 0xff);
    result[1] = (byte) (a >> 8 & 0xff);
    result[0] = (byte) (a & 0xff);
    目前,我有点比较模糊,为什么都是24 16 8 0 呢.
    他们之间都是减8,一个字节.
      

  6.   


    因为byte类型就只有1个字节,result是个byte数组,里面的元素都是byte,只有1个字节,8位
      

  7.   

    int是32位,byte是8位,
    而把int放到byte数组,就是需要长度为4的数组。
      

  8.   


    int a = 123456;
    int[] b = new int[4];
    b[0] = (byte) ((a >> 24) & 0xff);
    b[1] = (byte) ((a >> 16) & 0xff);
    b[2] = (byte) ((a >> 8) & 0xff);
    b[3] = (byte) (a & 0xff);

    System.out.println(b[0] + " " + b[1] + " " + b[2] + " " + b[3] + " " +
    (((b[0] & 0xff) << 24)| ((b[1] & 0xff) << 16)| ((b[2] & 0xff) << 8)| (b[3] & 0xff)));
      

  9.   

    & 0xff貌似没什么作用啊
      

  10.   

    0xff之类掩码一般用来防止sign extention 这里貌似无用武之地
      

  11.   

    强制转换为byte,进行截断,与 & 0xff的结果是一样的