从PHP打包C结构
我已经玩了很长时间,我不想承认,并意外地发现。有没有一种“好”的方法可以从PHP中创建C结构并考虑这些额外的填充字节 我知道可以使用“x”来注入空字节,但如何确定这些字节的位置以及以编程方式使用多少字节 同样,以下哪种方法更适合于对从PHP打包C结构,php,c,struct,pack,Php,C,Struct,Pack,我已经玩了很长时间,我不想承认,并意外地发现。有没有一种“好”的方法可以从PHP中创建C结构并考虑这些额外的填充字节 我知道可以使用“x”来注入空字节,但如何确定这些字节的位置以及以编程方式使用多少字节 同样,以下哪种方法更适合于对char-foo[10]数组进行建模 $struct = pack('a9x', $string); // vs. $struct = pack('a10', substr($string, 0, 9)); 我相信他们都完成了同样的任务,但我不确定是否存在任何潜在的
char-foo[10]
数组进行建模
$struct = pack('a9x', $string);
// vs.
$struct = pack('a10', substr($string, 0, 9));
我相信他们都完成了同样的任务,但我不确定是否存在任何潜在的陷阱。你试图做的事情是可以实现的,但非常危险。让我解释一下:
- PHP代码在很大程度上独立于它所运行的硬件/OS/C运行时
- (可移植)C源代码也是
- C二进制文件的编译/链接/加载过程肯定不是这样的(特别是如果将填充/打包问题留给编译器处理)
- 编写一个PHP扩展(这相当容易),它为您完成依赖于结构的内容,包括来自C程序的头文件。如果您在目标系统(或具有相同环境的系统)上编译此文件,则不会遇到上述问题
- 选择了另一种更高级别的通信机制:我们已经成功地将SysV消息用于一个非常类似的需求,但是还有很多方法要做
phpize
并创建一个。甚至可以在windows上工作。。。