Java中long和int互相转换,不改变原有数据

Java中long和int互相转换,不改变原有数据

文章目录

  • Java中long和int互相转换,不改变原有数据
    • 测试方法,及封装好的方法
    • 封装好之后的方法

测试方法,及封装好的方法

@Test
public void testLong2Int() {
long tmpLong = 3412567892L;

    // long转int数组
    int pre, suffix;
    pre = (int) ((tmpLong >> 16) & 0xffff);       //取高字节
    suffix = (int) (tmpLong & 0xffff);          //取低字节
    System.out.println(pre);
    System.out.println(suffix);

    // int转long
    long m2 = (((long) pre) << 16) | suffix;
    System.out.println(m2);
}

封装好之后的方法

/**
     * 传入一个long数据,返回一个int数组
     * 高位在前,低位在后
     *
     * @param tmpLong long数据
     * @return int数组
     */
    public static int[] long2IntArr(long tmpLong) {
        int pre, suffix;
//        pre = (int) ((tmpLong >> 16) & 0xffff);       //取高字节
//        suffix = (int) (tmpLong & 0xffff);          //取低字节
        pre = (int) ((tmpLong >> 32) & 0xffffffffL);       //取高字节
        suffix = (int) (tmpLong);          //取低字节
        return new int[]{pre, suffix};
    }

    /**
     * 传入2个int数据,返回一个long数值
     *
     * @param pre    高位
     * @param suffix 低位
     * @return long数据
     */
    public static long int2Long(Integer pre, Integer suffix) {
        long m2 = 0;
        if (Integer.toBinaryString(pre).length() >= 32) {
            m2 = ((pre.longValue()) << 32) | suffix;
        } else {
            String s = Integer.toBinaryString(pre) + getZero(32 - Integer.toBinaryString(suffix).length())
                    + Integer.toBinaryString(suffix);
            m2 = Long.parseLong(s, 2);
        }

        return m2;
    }

    public static String getZero(int length) {
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < length; i++) {
            stringBuilder.append("0");
        }
        return stringBuilder.toString();
    }

你可能感兴趣的:(java)