将2个8位字节数组位置组合成一个16位整数

时间:2013-07-09 16:26:41

标签: java android

我有一个字节数组,其中一个值存储为16位无符号整数。它分布在我的字节数组DataArray[11]DataArray[12]中的两个位置。我对包含字节数组的数据包的文档告诉我,我需要提取的值首先包含最低有效位。我无法绕过位掩码和位移,我实际上不清楚我是否需​​要使用其中一个,或两者兼而有之。

这是我到目前为止所做的,但结果似乎不对:

int result =  (DataArray[11] << 8 | DataArray[12]) & 0xFF;

1 个答案:

答案 0 :(得分:5)

你正试图获得一个16位整数,对吧?但是你使用& 0xff掩盖它 - 它将你限制在8位。我建议你屏蔽每个字节而不是结果:

int result = (DataArray[11] & 0xff) |
             ((DataArray[12] & 0xff) << 8);

我在这里添加的括号多于可能需要的括号,只是为了理智而不需要担心优先级。

我还交换了排序,以便您转移DataArray[12]而不是DataArray[11],因为它意味着首先是至少 - 显着的字节。