【发布时间】:2014-10-18 06:08:14
【问题描述】:
我在 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_address,即@987654326 @
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),然后它将由 datacenter 组成, client_id, data_id, data_counter 并且它们在 Java 中的数据类型也应该与上面在 c++ 中显示的相同。
在Java中,我想创建一个最终字节数组customer_address,它将是uint64_t,它将由datacenter、client_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);
}
【问题讨论】:
-
64bit int in java 是
Long -
你有什么理由不能使用课程吗?
-
@mp_ 实际上,我需要通过网络以网络字节顺序将此字节数组作为 Java 的输入发送到我的 c++ 程序,这就是原因。
标签: java c++ bytearray bytebuffer