zoukankan      html  css  js  c++  java
  • rosserial_python serial_node.py分析--补遗

    上位机会每隔2秒左右发送一个帧, 看帧id, 其实是0x0A, 就是时间, 那么问题来了, 后面8个字节怎么表示的时间呢?

        def handleTimeRequest(self, data):
            """ Respond to device with system time. """
            t = Time()
            t.data = rospy.Time.now()
            data_buffer = StringIO.StringIO()
            t.serialize(data_buffer)
            self.send( TopicInfo.ID_TIME, data_buffer.getvalue() )
            self.lastsync = rospy.Time.now()

    查Time.h文件, 发现序列化的方法是:

        virtual int serialize(unsigned char *outbuffer) const
        {
          int offset = 0;
          *(outbuffer + offset + 0) = (this->data.sec >> (8 * 0)) & 0xFF;
          *(outbuffer + offset + 1) = (this->data.sec >> (8 * 1)) & 0xFF;
          *(outbuffer + offset + 2) = (this->data.sec >> (8 * 2)) & 0xFF;
          *(outbuffer + offset + 3) = (this->data.sec >> (8 * 3)) & 0xFF;
          offset += sizeof(this->data.sec);
          *(outbuffer + offset + 0) = (this->data.nsec >> (8 * 0)) & 0xFF;
          *(outbuffer + offset + 1) = (this->data.nsec >> (8 * 1)) & 0xFF;
          *(outbuffer + offset + 2) = (this->data.nsec >> (8 * 2)) & 0xFF;
          *(outbuffer + offset + 3) = (this->data.nsec >> (8 * 3)) & 0xFF;
          offset += sizeof(this->data.nsec);
          return offset;
        }

    这样就明了了, 8个bytes,有4个是小数点之前, 有4个是小数点之后的.

    所以, "xc8x38x67x59x05xb6x2cx37", 其实是:

    0x596738c8   .  xxxx, 放计算器里面一算, 就是1499936968.xxxx不重要了吧...

    这样看来就没有设么问题了吧, 看来学点python不是没有好处.

  • 相关阅读:
    Java List集合
    Java 集合删除重复元素、删除指定元素
    进程和线程
    Java 线程的同步与死锁
    Java 线程的常用操作方法
    Java 多线程实现
    统计分析
    递归方法(回文)
    素数的输出
    动手动脑二
  • 原文地址:https://www.cnblogs.com/Montauk/p/7161927.html
Copyright © 2011-2022 走看看