gpt4 book ai didi

java - 将 long 和 bytearray 连接到另一个 bytearray

转载 作者:行者123 更新时间:2023-12-02 07:24:35 27 4
gpt4 key购买 nike

我正在尝试将 long 和 bytearray 连接到另一个 bytearray。

我尝试过这样的:

byte[] value1= new byte[16];
byte[] value2= new byte[16];
byte[] finalvalue = new byte[value1.length + value2.length];
long ts = System.currentTimeMillis();
int val = 100;

ByteBuffer.wrap(value1).order(ByteOrder.LITTLE_ENDIAN).asLongBuffer().put(ts);
ByteBuffer.wrap(value2).order(ByteOrder.LITTLE_ENDIAN).asIntBuffer().put(val);

System.arraycopy(value1, 0, finalvalue, 0, value1.length);
System.arraycopy(value2, 0, finalvalue, value1.length,value2.length);

当我尝试打印此内容时,我没有得到正确的值。它打印如下

BYTEVALUE -95-15-4410659100000000002000000000000000

它应该像这样打印

- BYTEVALUE- 1354707038625,100

谁能帮我解决我哪里出错了。

我们将不胜感激。

更新:

用于使用 StringBuffer 打印值,如下所示:

StringBuffer sb = new StringBuffer(finalvalue.length);
for (int i = 0; i < finalvalue.length; i++) {
sb.append(finalvalue[i]);
}

最佳答案

您的代码没有按照您的想法进行操作。考虑以下独立应用程序:

import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class ByteArrayTest {

public static void main(String[] args) {
byte[] value1 = new byte[16];
byte[] value2 = new byte[16];
byte[] finalvalue = new byte[value1.length + value2.length];
long ts = System.currentTimeMillis();
int val = 100;

ByteBuffer.wrap(value1).order(ByteOrder.LITTLE_ENDIAN).asLongBuffer()
.put(ts);
ByteBuffer.wrap(value2).order(ByteOrder.LITTLE_ENDIAN).asIntBuffer()
.put(val);

System.arraycopy(value1, 0, finalvalue, 0, value1.length);
System.arraycopy(value2, 0, finalvalue, value1.length, value2.length);

printByteArray(finalvalue);
}

private static void printByteArray(final byte[] array) {
StringBuilder sb = new StringBuilder(array.length);
for (byte b : array) {
sb.append(String.format("%02X", b));
}
System.out.println(sb.toString());
}
}

其输出是:

BE26086B3B010000000000000000000064000000000000000000000000000000

将其分成几个组成部分,我们可以看到原因:

  • 前十六个字节是 BE26086B3B0100000000000000000000。这是您的时间戳(以小端顺序排列)。如果忽略零字节,则会转换为十进制的 1,354,710,394,558,这是正确的。

  • 后 16 个字节是 64000000000000000000000000000000,这是您的硬编码值 100

零代表字节数组中您未使用的空间。

关于java - 将 long 和 bytearray 连接到另一个 bytearray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13722649/

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