花了几天时间终于调试通了,中间走了不省弯路,对协议中一些字段的理解有些偏差。协议中“校验和”字段耗费时间最长,校验和字段计算方法描述为将“消息头+会话头+事务头+操作消息”按32位异或,最后结果取反,表示成16进制,长度为8字节。这个描述刚看上去,确实头疼,想的很复杂,但最后正确的理解却很简单。32位即4个字节,将 消息头+会话头+事务头+操作消息拼成一个byte[],然后每4个字节为一组,一组一组的进行异或,即前两组异或结果与后一组异或,最终得出结果,再取反。下面为

    /** *//**
     * 计算检验和:将消息头+会话头+事务头+操作消息按32位异或,即4字节一组,依次异或,最后结果取反。转为16进制即为检验和。
     * @param str
     * @return
     */
    public String computeCheckSum(byte[] arr) ...{
        System.out.println("checksum string=" + new String(arr));
        byte[] res = new byte[4];
        for (int i = 0; i < arr.length; i += 4) ...{
            res[0] ^= arr[i];
            res[1] ^= arr[i + 1];
            res[2] ^= arr[i + 2];
            res[3] ^= arr[i + 3];
        }
        res[0] = (byte) ~res[0];
        res[1] = (byte) ~res[1];
        res[2] = (byte) ~res[2];
        res[3] = (byte) ~res[3];
        String resStr = "";
        for (int i = 0; i < 4; i++) ...{
            resStr = resStr + byte2hex(res[i]);
        }
        return resStr;
    }
    /** *//**
     * 将单字节转成16进制
     * @param b
     * @return
     */
    private String byte2hex(byte b) ...{
        StringBuffer buf = new StringBuffer();
        char[] hexChars = ...{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
        int high = ((b & 0xf0) >> 4);
        int low = (b & 0x0f);
        buf.append(hexChars[high]);
        buf.append(hexChars[low]);
        return buf.toString();
    }

其实就是这么简单,有种恍然大捂的感觉。协议中还有一个比较让人头疼的描述:16进制表示的16位或32位整数,高8位位组在前,低8位位组在后。举个例子: 
  int n = 148;   //  转换成4字节,16进制
  int hi = n >> 8 ;  //高16位 
  int lo = n & 0x00ff;  //低16位
  String hig = Integer.toHexString(hi);  //长度不足,再补0
  String low = Integer.toHexString(lo); // 16进制
----------------------------------------------------------------
这样148按要求就转换成了0094

写此备忘,以帮助以后调试此协议的其他朋友。无助的感觉却实很不好受!

调试华为MML协议备忘相关推荐

  1. Nancy之结合TinyFox调试备忘

    原文:Nancy之结合TinyFox调试备忘 最近把一个小项目的数据库换成MongoDB,同时用了MongoRepository 这个开源组件来对数据进行操作. 通过NuGet安装之后,它会自动在we ...

  2. linux 串口信息记到日志,[linux学习笔记]之一:ubuntu ch340调试备忘

    [linux学习笔记]之一:ubuntu ch340调试备忘 已有 2183 次阅读2016-11-8 21:52 |个人分类:linux 最近迷上了Linux,入了一块板.电脑使用win7+ubun ...

  3. 华为如何在手机桌面显示备忘录的备忘内容

    在华为手机上可以使用很多好用的备忘录工具,比如系统自带的备忘录,再比如,支持在其他手机端共享备忘录事项的云便签.这些好用的备忘录功能强大,不仅能打开应用查看备忘内容,还支持添加窗口小工具,让备忘录内容 ...

  4. MTK 10A 之前的备忘

    MTK 10A 之前的备忘 mmi_idle_exe_callback  进入待机前的准备,检查是否有新短信.未接来电(mmi_nmgr_entry_default_idle) 等 NetWorkAt ...

  5. CSP浏览器安全策略备忘

    挺久之前过了一遍CSP的安全策略,很多人把它喻为XSS攻击的终结者,因为这种策略不再像传统只靠各种正则和特征匹配来识别跨站攻击Payload,而是直接从协议层把一些存在安全隐患的用法默认给干掉了,把同 ...

  6. 前端那些年----Webstream快捷键备忘(mac)

    Webstream快捷键备忘(mac) 友情提示:webstream内置了一个强大的插件--Emmet插件.其用法请自行搜索. 其他插件 Markdown--支持md,点击下面的Text/Previe ...

  7. [原]TCP/UDP使用细节备忘

    [原]TCP/UDP使用细节备忘 首先,TCP和UDP的基本区别是TCP提供可靠的面向连接的流传输:UDP提供不可靠的基于数据包的传输: 所谓可靠就是说发送端调用send后,数据就一定会发送给接收端. ...

  8. Spring Spring MVC Hibernate 整合备忘

    以下为此三种框架整合配置的详细备注,以及部分问题备忘 项目结构和配置文件可访问 Github 查看 1. pom.xml 尽量使用 Maven 管理项目依赖以减少包引入时的麻烦,以及避免跨开发工具问题 ...

  9. vf更改当前路径_这份 window.location 备忘单,让你更有条理解决地址路径问题!...

    如果你想获取站点的URL信息,那么window.location对象什么很适合你!使用其属性获取有关当前页面地址的信息,或使用其方法进行某些页面重定向或刷新? https://segmentfault ...

  10. 20多个Maven命令和选项(备忘单)

    If you are working on Java, you must know Maven. Maven is the most popular project and dependency ma ...

最新文章

  1. python猿辅导_如何用数据分析方法剖析“猿辅导”K12课程
  2. 从代码角度揭示:华为鸿蒙的“套壳”真相!
  3. mpvue微信小程序动画_入门微信小程序
  4. Script:Generate A DDL Script For A Table
  5. 【codevs3304】水果姐逛水果店Ⅰ,线段树练习
  6. 知乎推荐算法工程师面经
  7. Linux登录公开ftp命令,linux下登录ftp, lftp命令详解
  8. 从turtlesim到贪吃蛇……(补充)
  9. FRP搭建内网穿透(亲测有效)
  10. Mybatis中如何实现一对一,一对多的关联查询?
  11. 利用nslookup命令查看MX记录、A记录、CNAME记录和NS记录
  12. 纱织小姐雅典娜_用雅典娜分析巧克力
  13. 情人节 礼物TOP10
  14. 【转载】讲真,认知几乎是人和人之间唯一的本质差别。
  15. 让你的代码只做一件事情
  16. 高中计算机专业班主任工作总结,大学班主任工作总结5篇
  17. ZeroTier-One配置moon心得
  18. element-ui中el-cascader级联选择器多选判断是否是全选
  19. 什么是GHZ?炫云到底是怎么收费的?
  20. Android系统移植与调试之如何修改Android系统默认显示【开发者选项】并默认打开【USB调试】和【未知来源】开关

热门文章

  1. gds文件 导出_cadence virtuoso 批量导出gds方法
  2. The application could not be installed: INSTALL_FALLED_INTERNAL_ERROR
  3. php去除图片水印源代码,基于python的图片修复程序(实现水印去除)
  4. css3学习以及移动端开发基本概念的思考
  5. UVA - 10041 Vito's Family (中位数)
  6. Annoying Present CodeForces - 1009C
  7. hdu 5296 Annoying problem (LCA)
  8. UVA 12304 计算几何+圆模板
  9. 在 MS Excel 中做t-test时 Hypothesized Mean Difference 是什么意思
  10. PS证件照蓝底转白底红底转白底