fix协议封装挑战-工具类

原创 2013年12月03日 12:43:20

MsgUtil:

 /*
     * @headerAndBody 包含消息头+消息体,包含SOH,不包含checksum域
     */
    public static String checkSum(String headerAndBody) {
        byte[] headerAndBodyBytes = headerAndBody.getBytes();
        
        int sum = 0;

        for (byte b : headerAndBodyBytes) {
            sum += b;
        }

        String rt = String.valueOf((sum) % 256);

        /*
         * 在模256之后需要转换成固定长度为3字符串
         */
        if (rt.length() == 1) {
            rt = "00" + rt;
        } else if (rt.length() == 2) {
            rt = "0" + rt;
        } else {
        }

        return rt;
    }
    
    public static String getGMTTime(){
        SimpleDateFormat foo = new SimpleDateFormat("yyyyMMdd-HH:mm:ss.SSS", Locale.ENGLISH);
        foo.setTimeZone(TimeZone.getTimeZone("GMT"));
        return foo.format(new Date());
    }
    
    public static String[] seperate(String msgStr){
    	String[] tags=msgStr.split(BaseMsg.SOH);
    	List<Integer> seqHead=new ArrayList<Integer>();
    	List<Integer> seqTailer=new ArrayList<Integer>();
    	int indexHead=0;
    	int indexTail=0;
    	boolean firstTail=true;
    	if(tags.length<5){
    		throw new InValidDataException("消息格式错误");
    	}else{
    			String tag=tags[0];
        		String [] ts=tag.split("=");
        		if(ts.length!=2){
        			throw new InValidDataException("消息格式错误");
        		}
        		String tagId=ts[0];
        		if(!tagId.equals("8")){
        			throw new InValidDataException("消息格式错误");
        		}
        		String tag1=tags[1];
        		String [] ts1=tag1.split("=");
        		if(ts1.length!=2){
        			throw new InValidDataException("消息格式错误");
        		}
        		String tagId1=ts1[0];
        		if(!tagId1.equals("9")){
        			throw new InValidDataException("消息格式错误");
        		}
        		String tag2=tags[2];
        		String [] ts2=tag2.split("=");
        		if(ts2.length!=2){
        			throw new InValidDataException("消息格式错误");
        		}
        		String tagId2=ts2[0];
        		if(!tagId2.equals("35")){
        			throw new InValidDataException("消息格式错误");
        		}
        		String tag3=tags[tags.length-1];
        		String [] ts3=tag3.split("=");
        		if(ts3.length!=2){
        			throw new InValidDataException("消息格式错误");
        		}
        		String tagId3=ts3[0];
        		if(!tagId3.equals("10")){
        			throw new InValidDataException("消息格式错误");
        		}
    	}
    	
    	for(int i=0;i<tags.length;i++){
    		String tag=tags[i];
    		String [] ts=tag.split("=");
    		if(ts.length!=2){
    			throw new InValidDataException("消息格式错误");
    		}
    		String tagId=ts[0];
    		if(allHead.contains(tagId)){
    			seqHead.add(i);
    			indexHead=i;
    		}
    		if(allTailer.contains(tagId)){
    			seqTailer.add(i);
    			if(firstTail){
    				indexTail=i;
    			}
    			firstTail=false;
    		}
    	}
    	for(int i=0;i<seqHead.size()-1;i++){
    		if(seqHead.get(i+1)-seqHead.get(i)!=1){
    			throw new InValidDataException("消息格式错误");
    		}
    	}
    	for(int i=0;i<seqTailer.size()-1;i++){
    		if(seqTailer.get(i+1)-seqTailer.get(i)!=1){
    			throw new InValidDataException("消息格式错误");
    		}
    	}
    	int index=0;
    	indexHead++;
        while(indexHead-->0){
        	index=msgStr.indexOf("=", index+1);
        }
        index=msgStr.indexOf(BaseMsg.SOH, index);
        String head=msgStr.substring(0, index+1);
        int indexT=0;
        while(indexTail-->0){
        	indexT=msgStr.indexOf("=",indexT+1);
        }
        indexT=msgStr.indexOf(BaseMsg.SOH, indexT);
        String tailer=msgStr.substring(indexT+1);
        String body=msgStr.substring(index+1, indexT+1);
        String[]sep=new String[3];
        sep[0]=head;
        sep[1]=body;
        sep[2]=tailer;
        return sep;
    }

checkSum计算10的值,
seperate将消息,分割为头,体,尾


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Delphi协议编解码工具类

  • 2013-08-10 10:45
  • 1016B
  • 下载

ESC/POS协议打印机工具类(java)

项目要求实现远程打印,目前设备已经到货,打印机为芯烨XP-80X热敏打印机。 一:去http://www.xprinter.net/里下载使用手册和编程手册,注:其他品牌去百度搜索官网 二:去服务与支...

浏览器 HTTP 协议缓存机制详解及Http协议预处理工具类

博主刚进入软件行业,上班早上扫代码的时候巧遇同事写的一个叫http协议预处理工具类,其中有一个setNoCache即设置不缓存的方法,涉及到Http缓存机制,但我对此并不了解,于是上网找到了两篇不错的...

CIUD封装工具类

【Android】封装一个简单好用的打印Log的工具类

不知众多Android开发者是否在程序开发的工程中也遇到过下面的问题: 0.如何在众多log中快速找到你设置打印的那行log? 1.是否还在不断的切换标签来查看使用不同TAG标签打印的log? ...

iOS工具类封装

Android笔记:SharedPreference封装常用的工具类(用于记住密码、自动登录、引导页、账号密码等)

SharePreference 数据库 File 存储 sqlite android 存储 封装 工具类 记住密码 自动登录 引导页 账号密码
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)