我从套接字byte[]
读取Param_Code
。 Param_Code
的条件如下:
•选项1:有时Param_Code
对应于ID
•选项2:有时Param_Code
对应于0x40000000 + ID
•选项3:有时Param_Code
对应于0x80000000 + 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;
}
我的问题是,当Param_Code
是上述选项之一时,我怎么知道(有if语句或其他内容)?
我如何获得身份证?
if( ? ){
it is Option 1 and ID = ?
}else if( ? ){
it is Option 1 and ID = ?
}else if( ? ){
it is Option 1 and ID = ?
}
答案 0 :(得分:1)
这是标准的bittwiddling
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
}
如果你没有遇到严重的问题,我的假设ID将适合0x3fffffff
答案 1 :(得分:0)
您应该在ID上添加一些限制。因为在那种情况下我们不能应用蒙版。
想象一下,你得到了0x81234123。它可以是:
提供额外条件以避免这种歧义。
我只能假设您的ID不包含第一个十六进制数字,因此,在这种情况下使用掩码:ID = NUM & 0x0FFFFFFF
NUM实际上就是你的字节[4]