所以我有一个方法,它采用整数n
和两个长x
和y
。它应该从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 = 3
,x = 45602345
和y = 10299207
提供该方法,则应该返回45699207
(正确...?),但它会返回{{1} } ..
它打印10299207
三次,所以我知道for和if / else正在工作。但由于某种原因,它仍然只返回"i < n"
数组。对不起,如果这是一个愚蠢的问题..我的新概念。
编辑:yb
和longToBytes
方法:
bytesToLong
答案 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的高位。
按预期打印。
45299207