如何在java中屏蔽字节以获取条件
我从套接字读取如何在java中屏蔽字节以获取条件,java,sockets,if-statement,byte,mask,Java,Sockets,If Statement,Byte,Mask,我从套接字读取byte[]作为Param\u code。Param_code的条件如下: •选项1:有时参数代码对应于ID •选项2:有时,参数代码对应于0x40000000+ID •选项3:有时,参数代码对应于0x8000000+ID 这是我的代码: byte[] cbuf = new byte[4]; socketReader.read(cbuf, 0, 4); int Param_Code = byteArrayToIntBI(cbuf, 0); public static int
byte[]
作为Param\u code
。Param_code
的条件如下:
•选项1:有时参数代码
对应于ID
•选项2:有时,参数代码
对应于0x40000000+ID
•选项3:有时,参数代码
对应于0x8000000+ID
这是我的代码:
byte[] cbuf = new byte[4];
socketReader.read(cbuf, 0, 4);
int Param_Code = byteArrayToIntBI(cbuf, 0);
public static int byteArrayToIntBI(byte[] b, int offset) {
int value = 0;
for (int i = 3; i > -1; i--) {
int shift = (i) * 8;
value += (b[i + offset] & 0x000000FF) << shift;
}
return value;
}
您应该在ID上添加一些限制。因为在这种情况下我们无法应用掩码 想象一下,您得到了0x81234123。它可以是:
- ID 0x81234123
- ID 0x41234123
- ID 0x01234123
ID=NUM&0x0FFFFFFF
NUM实际上是您的字节[4]这是标准的位旋转
int mask1 = 0x80000000;
int mask2 = 0x40000000;
int id = paramCode & ~(mask1|mask2);// ~ is NOT, & is AND and | is OR
if((paramCode&mask1) != 0){
//option 2
}else if((paramCode&mask2) != 0){
//option 3
}else{
//option 1
}
im assumming ID将适用于
0x3fffffff
如果您有严重问题我在if语句中得到此错误:运算符“&”不能应用于“int”,布尔值@michdraft添加了参数以修复优先级问题SPARAM_代码是我从套接字中得到的。有时参数代码仅包括ID,有时包括(0x40000000+ID),有时包括(0x8000000+ID)。您能提供一个if语句让我更清楚吗?code=code&0x0FFFFFFF不带ifs。但只有当您的id限制在0x0FFFFFI REQUIRE IF语句的范围内时,才需要知道参数代码中何时包含此条件之一。因为每一种情况都应该以不同的方式处理。
int mask1 = 0x80000000;
int mask2 = 0x40000000;
int id = paramCode & ~(mask1|mask2);// ~ is NOT, & is AND and | is OR
if((paramCode&mask1) != 0){
//option 2
}else if((paramCode&mask2) != 0){
//option 3
}else{
//option 1
}