将一个int和2个short打包成一个long

问题描述 投票:0回答:1

我在将

int
short
short
打包到
long
中时遇到问题。

这是我到目前为止所得到的:

int p = 123456;
short x = -567;
short y = 789;

long l = (((long) p) << 32) | (x & 0xffff0000L) | (y & 0x0000ffffL);

int p2 = (int) (l >> 32);
short x2 = (short) (l >> 48);
short y2 = (short) l;

产生

p=123456, p2=123456
x=-567, x2=1        // bad result
y=789, y2=789

中间值不正确。我该如何解决这个问题?

java bit-manipulation
1个回答
1
投票

您需要将

x
移过来:将
(x & 0xffff0000L)
替换为
((x & 0x0000ffffL) << 16)

然后你需要修复班次才能检索它:

short x2 = (short) (l >> 16)

© www.soinside.com 2019 - 2024. All rights reserved.