一个人定义了UDP报文的数据结构 如下图所示
测试16进制报文:56 53 01 1B 02 0A 0F 1A C4 17 D2 08 17 7C 20 31 20 EC 3F 20 58 B9 54 62 00 00Navigatonal Status只有4bit 我不知道怎么解析出来 很多都不是8的倍数呢?java的byte至少都是8bit啊...DatagramPacket 接到的都是以位来处理的吧,想mmsi 30bit,Navigatonal Status 4bit,我怎么解析出来呢。如下所示难道需要我把byte转换成bit吗?我觉得对方应该用byte作为UDP报文的单位才合理呢。
            public ClassHeader onDataType1(DatagramPacket data) {
ClassAD clazz = new ClassAD();
for (int i = 0; i < data.getLength(); i++) {
// 起始标志 4*2
if (i <= 1) {
clazz.starter[i] = data.getData()[i];
}
// 报文类型 1*2 --------------------
else if (i == 2) {
clazz.type[i - 2] = data.getData()[i];
}
// 正文长度 2*2
else if (3 <= i && i <= 4) {
clazz.contentLength[i - 3] = data.getData()[i];
}
// 时
else if (i == 5) {
System.out.println("时:"
+ Integer.parseInt(data.getData()[i] + "", 16));
}
// 分
else if (i == 6) {
System.out.println("分:"
+ Integer.parseInt(data.getData()[i] + "", 16));
}
// 秒
else if (i == 7) {
System.out.println("秒:"
+ Integer.parseInt(data.getData()[i] + "", 16));
}
// MMSI 4*2
else if (9 <= i && i <= 12) {
clazz.mmsi[i - 9] = data.getData()[i];
}
}
System.out.println("start:" + clazz.getStarter());
System.out.println("type:" + clazz.getType());
System.out.println("contentLength:" + clazz.getContentLength()); return clazz;
}
大家别仍我转头啊 我做网络编程这方面很少 很多地方都不懂 请多多指教..我不会解析这种不是8的倍数的数据项...请大家帮我看看..