3

我需要将 a 转换QByteArray为结构。我有这样的结构:

   struct mavlink_attitude_t
      {
          /// <summary> Timestamp (milliseconds since system boot) </summary>
            quint32 time_boot_ms;
              /// <summary> Roll angle (rad, -pi..+pi) </summary>
            float roll;
              /// <summary> Pitch angle (rad, -pi..+pi) </summary>
            float pitch;
              /// <summary> Yaw angle (rad, -pi..+pi) </summary>
            float yaw;
              /// <summary> Roll angular speed (rad/s) </summary>
            float rollspeed;
              /// <summary> Pitch angular speed (rad/s) </summary>
            float pitchspeed;
              /// <summary> Yaw angular speed (rad/s) </summary>
            float yawspeed;

      };

我有一个QbyteArray来自串口。我已经使用了 union 但我认为它不能用于QByteArray. 还有其他方法吗?一个例子真的很有帮助。

4

2 回答 2

4

你可以投射它:

QByteArray arr;
mavlink_attitude_t* m = reinterpret_cast<mavlink_attitude_t*>(arr.data());
于 2014-10-28T08:33:44.007 回答
0

接受的响应无法工作。.data()为空终止。
你有浮点数和整数,使用左移。
例子:

mavlink_attitude_t.time_boot_ms = (bytearray.at(0) & 0xFFFF)      |
                                  (bytearray.at(1) & 0xFFFF) << 8 |
                                  (bytearray.at(2) & 0xFFFF) << 16|
                                  (bytearray.at(3) & 0xFFFF) << 24

如果您使用 Little endian,请反转索引。

于 2017-02-24T15:32:33.427 回答