したがって、整数n
と2つのlong x
とy
を取るメソッドがあります。最初のn
バイトをx
から、残りをy
から戻す必要があります。十分に簡単ですが、私はバイトで直接作業するのが初めてで、このメソッドを動作させることはできません。Javaはlongから特定のバイトを取得します
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"
3回を印刷しますforとif/elseが動作しています。何らかの理由でまだyb
配列しか返していません。これは愚かな質問である場合は申し訳ありません..私のための新しいコンセプト。
EDIT: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();
}
あなたは数字と混同しているようです。あなたが望む出力では、 'x'の最初の3桁と' y'の残りの部分を取ります。 – Tunaki
さて、私はそれが何であるかの感覚を持っていました。だから私はそれに同じ数字をフィードし、最初の3バイトではなく、数字を使用する場合、このメソッドが返すべきものは何でしょうか? – isaac6
結果はあなたのものとまったく同じです。 'longToBytes(45602345) 'と' longToBytes(10299207) 'を印刷すると、最初の3つがすべて0であることがわかります。 – Tunaki