Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将2个8位字节数组位置合并为一个16位整数_Java_Android - Fatal编程技术网

Java 将2个8位字节数组位置合并为一个16位整数

Java 将2个8位字节数组位置合并为一个16位整数,java,android,Java,Android,我有一个字节数组,其中一个值存储为16位无符号整数。这分布在字节数组中的两个位置,DataArray[11]和DataArray[12]。我拥有的包含字节数组的数据包文档告诉我,我需要提取的值首先是压缩的最低有效位。我很难将我的头缠绕在位掩码和位移位上,实际上我不清楚我是否需要使用其中一个或另一个,或者两者都使用 这就是我目前所掌握的,但结果似乎并不正确: int result = (DataArray[11] << 8 | DataArray[12]) & 0xFF;

我有一个字节数组,其中一个值存储为16位无符号整数。这分布在字节数组中的两个位置,
DataArray[11]
DataArray[12]
。我拥有的包含字节数组的数据包文档告诉我,我需要提取的值首先是压缩的最低有效位。我很难将我的头缠绕在位掩码和位移位上,实际上我不清楚我是否需要使用其中一个或另一个,或者两者都使用

这就是我目前所掌握的,但结果似乎并不正确:

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

int result=(DataArray[11]您试图获取一个16位整数,对吗?但您正在使用
&0xff
屏蔽它-这将您限制为8位。我建议您屏蔽每个字节,而不是结果:

int result = (DataArray[11] & 0xff) |
             ((DataArray[12] & 0xff) << 8);
int结果=(数据数组[11]&0xff)|

((DataArray[12]&0xff)“结果似乎不正确”没有告诉我们任何有用的信息。请给出一个输入和输出示例…如果DataArray类型为byte,您可能会遇到将8位向左移位的问题!!!!在移位之前将数组项转换为unsigned short。@alexbuisson:无论如何,byte没有移位运算符-它将自动升级为
int
,并且不
unsigned short
在Java中键入。如果认为它被标记为c++输入,那么很抱歉,它是一个val 0-65535。我得到的输出只有3位数字,如153、157、161等。我相信这是由我应用的位掩码造成的。我甚至不确定我是否需要它。正如我所说的,我在这方面遇到了困难。我想我基本上只是需要d连接2字节数组位置并转换为整数。我不确定是否先使用无符号和LSB才重要。如果使用DataArray[12],后者会给出错误的结果由于符号扩展而为负数。此外,LSB优先表示必须交换数组positions@Joni:啊,关于第二个表单的观点很好。将删除该表单,并修复排序。非常感谢Jon Skeet,这似乎工作得很好。正如我正确理解的那样,位掩码0xFF确保我只从每个数组位置获得所需,“@user2565357:the
&0xff
有效地将每个字节视为无符号值,而不是有符号值。