我必须在PHP中解压一个结构,其中写入fifo。struct是由Qt应用程序创建的,如下所示:
typedef struct {
float32_t fNumberOne;
uint16_t uIntOne; //maybe padding for alignment?
bool_t myOneBitBool;
float32_t fNumberTwo;
} mystruct;现在,对结构进行序列化,将其写入fifo /命名管道中,这样“PHP”就可以读取fifo并解压()结构。如果你读fifo,你会得到一个字符串。这个字符串可以通过substr()获得(在本例中)第一个浮动fNumberOne的4字节。如果您得到您的子字符串,您可以用"f“之类的参数来解压()。这对我来说很好。
但是,正如你可以看到的,这里有1 32位浮点数,1 16位int,我们的1 bool只需要1位,另一个32位浮点数。
所以我的问题是,如果我得到了我的第一个浮点数和第一个16位int (字节1-4和5-6),我如何从这个结构字符串中得到我的bool位(位置7?)?编译器如何处理bool和第二个浮点数(7和8的字节其余部分)之间的其他15位呢?下一个比特是第二个浮点数还是未使用的?或者有什么帮助让编译器知道他必须使用另一个32位容器吗?
或者更好的是,在二进制级别上,结构字符串是怎样的呢?
有关更多信息,编译器不在此设置中配置。这都是在斯坦特的设置。
事先非常感谢
发布于 2015-04-15 15:05:03
如果你使用的是C++11,alignas()可能就是你想要的
https://stackoverflow.com/questions/29651484
复制相似问题