gpt4 book ai didi

php - 从 PHP 打包 C 结构

转载 作者:行者123 更新时间:2023-11-30 15:48:56 26 4
gpt4 key购买 nike

我玩过 pack()比我愿意承认的时间要长,并且意外地偶然发现了data structure alignment 。有没有一种“好的”方法可以从 PHP 中创建 C 结构并考虑这些额外的填充字节?

我知道您可以使用“x”注入(inject) NULL 字节,但是如何确定这些字节的去向以及以编程方式使用多少字节?

同样,以下哪种方法更适合对 char foo[10] 数组进行建模?

$struct = pack('a9x', $string);
// vs.
$struct = pack('a10', substr($string, 0, 9));

我相信它们都完成了同样的事情,但我不确定是否存在任何潜在的陷阱。

最佳答案

你尝试做的事情是可以实现的,但非常危险。让我解释一下:

  • PHP 代码在很大程度上独立于其运行的硬件/操作系统/C 运行时
  • (可移植)C 代码大部分也是
  • C 二进制的编译/链接/加载过程绝对不是(特别是如果您将填充/打包问题留给编译器)

现在你在 PHP 中尝试做的就是部分地重新实现这个编译/链接/加载过程,但没有可靠的机制来确定适应环境。

我推荐两种更可靠的方法之一:

  • 编写一个 PHP 扩展(这相当简单),它会为您完成与结构相关的工作,包括 C 程序的 header 。如果您在目标系统(或具有相同环境的系统)上编译它,您将不会遇到上述麻烦
  • 选择另一种更高级别的通信机制:我们已成功使用 SysV 消息来满足非常相似的需求,但还有很多方法可以实现。

关于php - 从 PHP 打包 C 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16532249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com