if (config[bit][1] == 2) {
varLen = varLen - 1;
}
byte[] varValue = new byte[varLen];
System.arraycopy(realbody, tmplen, varValue, 0, varValue.length);
int datLen = 0;
if (config[bit][1] == 2) {
datLen = LoUtils.bcdToint(varValue);
} else {
datLen = byteToInt(varValue);
}
tmplen += varLen;
// 取出变长部分后带的值。
nextData = new byte[datLen];
System.arraycopy(realbody, tmplen, nextData, 0,nextData.length);
tmplen += nextData.length;
} else {
nextData = new byte[config[bit][2]];
System.arraycopy(realbody, tmplen, nextData, 0,nextData.length);
tmplen += config[bit][2];
}
outBitMap.setDat(nextData);
outList.add(outBitMap);
}
}
return outList;
}
/**
* 打包响应包,不包括消息类型
* @param list
* @return byte[]
*/
@SuppressWarnings("unchecked")
public static byte[] PackResponse(List list) {
int len = 16;
for (int i = 0; i < list.size(); i++) {
BitMap bitMap = (BitMap) list.get(i);
// 计算请求包总长度
if (bitMap.getBittype() == 2) {
if (bitMap.getVariable() > 0) {
len += bitMap.getVariable() - 1 + bitMap.getDat().length;
} else {
}
} else {
len += bitMap.getVariable() + bitMap.getDat().length;
}
}
byte[] body = new byte[len];
// 位图
boolean[] bbitMap = new boolean[129];
bbitMap[1] = true;
int temp = (bbitMap.length - 1) / 8;
for (int j = 0; j < list.size(); j++) {
BitMap bitMap = (BitMap) list.get(j);
bbitMap[bitMap.getBit()] = true;
byte[] bitmap = LoUtils.getByteFromBinary(bbitMap);
System.arraycopy(bitmap, 0, body, 0, bitmap.length);
// 数据
if (bitMap.getVariable() > 0) {
// 数据是可变长的:拼变长的值
byte[] varValue = null;
if (bitMap.getBittype() == 2) {
varValue = LoUtils.StrToBCDBytes(String.format("%0"+ bitMap.getVariable() + "d",bitMap.getDat().length));
} else {
varValue = String.format("%0" + bitMap.getVariable() + "d",bitMap.getDat().length).getBytes();
}
System.arraycopy(varValue, 0, body, temp, varValue.length);
temp += varValue.length;
// 拼变长部分后所带的数的值。
System.arraycopy(bitMap.getDat(), 0, body, temp, bitMap.getDat().length);
temp += bitMap.getDat().length;
} else {
// 数据是固定长度的。
byte dat[] =new byte[bitMap.getLen()];
if (bitMap.getDat().length!=bitMap.getLen()){
System.arraycopy(bitMap.getDat(), 0, dat, 0, bitMap.getLen());
}else{
dat=bitMap.getDat();
}
System.arraycopy(dat, 0, body, temp, dat.length);
temp += bitMap.getDat().length;
}
}
return body;
}
}
作者“ERDP技术架构”