gpt4 book ai didi

java - 如何构造一个包含多种数据类型值的字节数组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:42:29 24 4
gpt4 key购买 nike

我在 C++ 中有一个头文件 client_address.h,其中我有以下声明 -

typedef uint64_t   CustomerAddress;

void client_data(uint8_t datacenter,
uint16_t client_id,
uint8_t data_id,
uint32_t data_counter,
CustomerAddress& customer_address);

然后在我的实现文件 client_address.cpp 中,我实现了 client_data 方法 - 所以它的作用是将几个变量作为参数,然后生成一个其中的最终变量 customer_addressuint64_t

void client_data(uint8_t datacenter, 
uint16_t client_id,
uint8_t data_id,
uint32_t data_counter,
CustomerAddress& customer_address)
{
customer_address = (uint64_t(datacenter) << 56)
+ (uint64_t(client_id) << 40)
+ (uint64_t(data_id) << 32)
+ data_counter;
}

我需要在 Java 中做同样的事情,我将有一个变量,它将是 customer_address 并且在 Java 中它将是 uint64_t(我猜是 Ineteger),然后它将被创建由 datacenterclient_iddata_iddata_counter 组成,它们在 Java 中的数据类型也应该相同,如图所示以上为 C++ 语言。

在 Java 中,我想制作一个最终字节数组 customer_address,它将是 uint64_t,它将由 datacenterclient_id 组成, data_id, data_counter 在 Java 中具有相同的数据类型。我该怎么做?

任何简单的例子都可以帮助我更好地理解。

更新

我下面的方法看起来正确吗?

long client_data(byte datacenter, short client_id, byte data_id, int data_counter) {
return ((long) (datacenter) << 56) | ((long) client_id << 40) | ((long) data_id << 32) | ((long) data_counter);
}

最佳答案

首先,您可以将值存储在 Long 中与您在 C/C++ 中的操作方式类似
但要注意 Java 的签名; +可以给出二进制或 | 以外的其他结果
IE。类似 Long 的东西的:

customer_address = (datacenter << 56)
| (client_id << 40)
| (data_id << 32)
| data_counter;

当然,你也可以在这里转换变量,就像在 C/C++ 中一样
(如果它们还不是 Long)。
您问题中的函数可能看起来像那样(但有返回值
而不是引用,因为这在 Java 中对于原始类型来说是一个痛苦):

long client_data(byte datacenter, 
short client_id,
byte data_id,
int data_counter)
{
return ((long(datacenter) << 56)
| (long(client_id) << 40)
| (long(data_id) << 32)
| long(data_counter));
}

然后,您可以获得这样的字节数组:

ByteBuffer b = ByteBuffer.allocate(8);
b.order(ByteOrder.BIG_ENDIAN);
b.putLong(blablavariable);
byte[] result = b.array();

将每个部分转换为字节并在之后连接它们
(而不是 << -thing)也可以。

关于java - 如何构造一个包含多种数据类型值的字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26436810/

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