gpt4 book ai didi

java - 如何打包和解包给定特定格式的长变量?

转载 作者:行者123 更新时间:2023-12-01 18:24:19 25 4
gpt4 key购买 nike

我正在打包我的address变量,它是长数据类型,它由datacenterclient_iddata_id组成code> 和 data_counter 如下所示 -

long address = client_data((byte) 2, (short) 100, (byte) 22, (int) 120);

private static 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);
}

现在我想从 address< 中提取 datacenterclient_iddata_iddata_counter/ 变量?所以我从下面的代码开始 -

为了提取数据中心,这就是我正在使用的 -

value = ((address >>> 56) & ((1 << 8) - 1));

为了提取 client_id,这就是我正在使用的 -

value = ((address >>> 40) & ((1 << 16) - 1));

为了提取 data_id,这就是我正在使用的 -

value = ((address >>> 32) & ((1 << 8) - 1));

但是如何提取 data_counter 呢?下面的代码对我不起作用。

value = ((address) & ((1 << 32) - 1));

最佳答案

(1<<32)不会做你想做的事,因为 1默认情况下被视为 32 位 int。所以它尝试计算 (1<<32)作为 32 位 int。但是 32 位 int 没有足够的位来保存 (1<<32) .

使用(1L<<32) 。然后你会得到一个long ,它足够大以容纳该数字。

编辑:

为了清楚起见,你最终会得到:

value = (address & ((1L << 32) - 1));

关于java - 如何打包和解包给定特定格式的长变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26746164/

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