如何解压来自 Qt 结构/字符串的 PHP 中的布尔值

How to unpack a bool in PHP coming from a Qt struct / string

我必须解压缩 PHP 中的一个结构,该结构已写入 fifo。 struct original 由 Qt 应用程序创建,如下所示:

    typedef struct {
       float32_t fNumberOne;
       uint16_t uIntOne; //maybe padding for alignment?
       bool_t myOneBitBool;
       float32_t fNumberTwo;
    } mystruct;

现在,结构被序列化以将其写入 fifo / 命名管道,这样 'the PHP' 就可以读取 fifo 并解压结构。 如果你读取 fifo,你会得到一个字符串。您可以使用 substr() 为第一个浮点数 fNumberOne 获取(在此示例中)4 字节的该字符串。如果你得到了你的子字符串,你可以使用 "f" 之类的参数来解压()这个浮点数。这对我来说很好。

但是,正如您在这里看到的,有 1 个 32 位浮点数、1 个 16 位整数、我们的 1 个只需要 1 位的布尔值和另一个 32 位浮点数。

所以我的问题是,如果我正确地得到我的第一个浮点数和第一个 16 位整数(字节 1-4 和 5-6),以及我如何从这个结构字符串中得到我的 bool 位(在位置 7 内) ?)?编译器如何处理布尔值和第二个浮点数之间的其他 15 位(7 和 8 的剩余字节)?接下来的位是第二个浮点数还是未使用?或者有没有帮助任何填充来告诉编译器他必须使用另一个 32 位容器?

或者更好的是,结构字符串在二进制级别上看起来如何?

有关详细信息,编译器未配置为该设置。都是标准设置。

非常感谢

如果您使用的是 C++11,alignas() 可能就是您要找的东西