2

我有一个字节数组,其中一个值存储为 16 位无符号整数。这分布在我的字节数组中的两个位置,DataArray[11]并且DataArray[12]. 我为包含字节数组的数据包提供的文档告诉我,我需要提取的值首先打包最低有效位。我在使用位掩码和位移时遇到了麻烦,实际上我不清楚我是否需​​要使用其中一个,或者两者都使用。

这是我到目前为止所拥有的,但结果似乎不正确:

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

1 回答 1

6

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

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

我在这里包含了比可能需要的更多的括号,只是为了保持理智而不需要担心优先级。

我还交换了顺序,以便您移动DataArray[12]而不是DataArray[11],因为它意味着首先是不重要的字节。

于 2013-07-09T16:30:05.403 回答