当前位置: 代码迷 >> J2EE >> UDP报文解析,小弟我如何解析只有1bit的数据项啊(对方报文的单位是bit)
  详细解决方案

UDP报文解析,小弟我如何解析只有1bit的数据项啊(对方报文的单位是bit)

热度:233   发布时间:2016-04-22 02:45:10.0
UDP报文解析,我怎么解析只有1bit的数据项啊?(对方报文的单位是bit)
一个人定义了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 00

Navigatonal Status只有4bit 我不知道怎么解析出来 很多都不是8的倍数呢?java的byte至少都是8bit啊...

DatagramPacket 接到的都是以位来处理的吧,想mmsi 30bit,Navigatonal Status 4bit,我怎么解析出来呢。如下所示

难道需要我把byte转换成bit吗?

我觉得对方应该用byte作为UDP报文的单位才合理呢。

Java code
            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的倍数的数据项...

请大家帮我看看..

------解决方案--------------------
别沉阿.. 望高手解决阿...
  相关解决方案