I would like to know more about the pack()
function in PHP: https://secure.php.net/manual/en/function.pack.php
I know it packs data into binary, but I'm not sure what all those v V n N c C
mean and I was wondering if someone could be so kind as to give me a practical demonstration when to use which formats?
The online documentation, for a change, lacks of information, in my opinion.
Those represent how you want the data you are packing to be represented in binary format:
so
$bin = pack("v", 1); => 0000000000000001
(16bit)
where
$bin = pack("V", 1) => 00000000000000000000000000000001
(32 bit)
It tells pack how you want the data represented in the binary data. The code below will demonstrate this. Note that you can unpack with a different format from what you packed the data as.
<?php
$bin = pack("S", 65535);
$ray = unpack("S", $bin);
echo "UNSIGNED SHORT VAL = ", $ray[1], "\n";
$bin = pack("S", 65536);
$ray = unpack("S", $bin);
echo "OVERFLOW USHORT VAL = ", $ray[1], "\n";
$bin = pack("V", 65536);
$ray = unpack("V", $bin);
echo "SAME AS ABOVE BUT WITH ULONG VAL = ", $ray[1], "\n";
?>