1.13. Storing Binary Data in Strings
Problem
You want to parse a string that contains values encoded as a binary structure or encode values into a string. For example, you want to store numbers in their binary representation instead of as sequences of ASCII characters.
Solution
Use pack( )
to store binary data in a string:
$packed = pack('S4',1974,106,28225,32725);Use unpack( )
to extract binary data from a string:
$nums = unpack('S4',$packed);Discussion
The first argument to pack( )
is a format string
that describes how to encode the data that’s passed
in the rest of the arguments. The format string S4
tells pack( ) to produce four unsigned short
16-bit numbers in machine byte order from its input data. Given 1974,
106, 28225, and 32725 as input, this returns eight bytes: 182, 7,
106, 0, 65, 110, 213, and 127. Each two-byte pair corresponds to one
of the input numbers: 7 * 256 + 182 is 1974; 0 * 256 + 106 is 106;
110 * 256 + 65 = 28225; 127 * 256 + 213 = 32725.
The first argument to unpack( )
is also a format string, and the
second argument is the data to decode. Passing a format string of
S4, the eight-byte sequence that pack( ) produced returns a four-element array of the original
numbers:
print_r($nums); Array ( [1] => 1974 [2] => 106 [3] => 28225 [4] => 32725 )
In unpack( ), format characters and their count
can be followed by a string to be used as an array key. For example:
$nums = unpack('S4num',$packed);
print_r($nums);
Array
(
[num1] => 1974
[num2] => 106
[num3] => ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access