Java从长时间获取某些字节

时间:2016-08-02 18:39:56

标签: java arrays

所以我有一个方法,它采用整数n和两个长xy。它应该从n返回前x个字节,其余来自y。看起来很简单,但我是新手直接使用字节,无法使这种方法工作。

public static long nBytesFromXRestY(int n, long x, long y) {
    int yl = longToBytes(y).length;
    byte[] xx = new byte[yl];
    byte[] xa = longToBytes(x);
    byte[] yb = longToBytes(y);
    for (int i=0;i<xx.length;i++) {
        if (i < n) {
            System.out.println("i < n");
            xx[i] = xa[i];
        } else {
            xx[i] = yb[i];
        }
    }
    System.out.println(Arrays.toString(xx));
    return bytesToLong(xx);
}

如果我为n = 3x = 45602345y = 10299207提供该方法,则应该返回45699207(正确...?),但它会返回{{1} } ..

它打印10299207三次,所以我知道for和if / else正在工作。但由于某种原因,它仍然只返回"i < n"数组。对不起,如果这是一个愚蠢的问题..我的新概念。

编辑:yblongToBytes方法:

bytesToLong

1 个答案:

答案 0 :(得分:1)

您可以使用bitshifting而不是创建对象。

public static long nBytesFromXRestY(int n, long x, long y) {
    long mask = ~0L << (n * 8);
    return (x & mask) | ( y & ~mask);
}

这将返回y的最低n * 8位和x的高位。

http://ideone.com/1CkqYT

按预期打印。

45299207