PHP包:不太懂

时间:2017-05-11 15:22:39

标签: php pack

我发布了这个(php pack: problems with data types and verification of my results)并发现我有两个问题。 所以这里只有一个问题(我解决了另一个问题)希望这很容易理解: 我想使用PHP pack()函数。 1)我的目标是将任何整数数字信息转换为长度为2字节的十六进制数。 示例:0d37 - > 0x0025

2)第二个目标是切换每个值的高/低字节:0x0025 - > 0x2500 3)有许多输入值将形成12字节的二进制数据。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

您只需在pack() manual page中查找格式表,这很容易。

2个字节表示16位,或者也称为"短"。我假设你想要那个无符号的...所以我们得到n用于大端(高)和v用于小端(低)字节顺序。

唯一可能棘手的部分是弄清楚如何组合格式和参数,因为每个格式字符都绑定到一个值参数:

bin2hex(pack('nv', 34, 34)) // returns 00222200

如果您需要可变数量的值,则需要进行agument解包(PHP语言功能,不要与unpack()混淆):

$format = 'nv';
$values = [34, 34];
pack($format, ... $values); // does the same thing

或者,如果您的所有值都应使用相同的格式打包,则可以执行此操作:

pack('v*', $values); // will "pack" as many short integers as you want