int i=0;
long l=i;i四个字节,l八个字节。

解决方案 »

  1.   

    thanks,
    long 的高四个字节是int a=123,
    long 的低四个字节是int b=456.
      

  2.   

    to layueer,
    怎么转换?如果:
    int a=123;
    int b=456;long c=?
      

  3.   

    如果 int a =123; int=456楼主想得到 c=123456的话 可以这样String s = "" + a + b;
    long c = Long.parseLong(s);
      

  4.   

    考虑到效率,最好使用如下代码:
    int high = 123;
    int low  = 456;
    long num = high; //这里自动转换
    num = num << 4 + low;
      

  5.   

    对不起,上面有个错误
    int high = 123;
    int low  = 456;
    long num = high; //这里自动转换
    num = num << 32 + low;
      

  6.   

    thanks,
    to  wing9501,
    怎么转换有一部分数据是负数?
      

  7.   

    我的转换代码如下:
          int high = 123;
          int low  = 456;      byte h[]=new byte[4];
          h=IntToByteArray(high);      byte l[]=new byte[4];
          l=IntToByteArray(low);      byte n[]=new byte[8];      System.arraycopy(h,0,n,0,4);
          System.arraycopy(l,0,n,4,4);      num=BytesToLong(n);不知我的对不对?
    各位高手指教一下?
    怎么转换有一部分数据是负数?
    使用wing9501(little bird)的方法有同样的问题?
    且两种方法的结果竞不一样?
      

  8.   

    TO 楼主:
    看你费得这个劲!多简单的东西啊.
    <<
        long merge(int high, int low) {
            long lhigh = ((long)high)&0xFFFFFFFFL;
            long llow = ((long)low)&0xFFFFFFFFL;
            return (lhigh<<32&0xFFFFFFFF00000000L)|llow;
        }
    >>
    单元测试也给你:
    <<
        public void testMerge() {
            assertEquals(0x0000000000000000L, merge(0x00000000, 0x00000000));
            assertEquals(0xFFFFFFFFFFFFFFFFL, merge(0xFFFFFFFF, 0xFFFFFFFF));
            assertEquals(0x00000000FFFFFFFFL, merge(0x00000000, 0xFFFFFFFF));
            assertEquals(0xFFFFFFFF00000000L, merge(0xFFFFFFFF, 0x00000000));
        }
    >>
      

  9.   

    楼上的方法很好,算法完全正确,而且速度快(逻辑运算)。我上csdn没有规律,请搂主见谅。