gpt4 book ai didi

Java 从 long 中获取某些字节

转载 作者:行者123 更新时间:2023-11-30 07:14:01 25 4
gpt4 key购买 nike

所以我有一个方法,它需要一个整数 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 (对吧..?),但它会返回 10299207 ..

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

编辑:longToBytesbytesToLong 方法:

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();
}

最佳答案

您可以使用位移来代替创建对象。

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        

关于Java 从 long 中获取某些字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38728144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com