日期:2014-05-20  浏览次数:20769 次

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

请大家帮我看看..

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