Java数组从长数组中获取特定字节
所以我有一个方法,它接受一个整数n
,和两个长x
和y
。它应该从x
返回第一个n
字节,从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
(对吧?)但它将返回10299207
它打印"i < n"
三次,这样我就知道for和if/else正在工作。但是出于某种原因,它仍然只返回yb
数组。对不起,如果这是一个愚蠢的问题。。对我来说是个新概念
编辑:longToBytes
和bytesToLong
方法:
public static long bytesToLong(byte[] bytes) {
ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
buffer.put(bytes, 0, bytes.length);
buffer.flip();//need flip
return buffer.getLong();
}
public static byte[] longToBytes(long x) {
ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
buffer.putLong(0, x);
return buffer.array();
}
# 1 楼答案
可以使用位移动而不是创建对象
这将返回
y
的最低n*8位和x的较高位http://ideone.com/1CkqYT
按预期打印