PHP code example of klermonte / zerg
1. Go to this page and download the library: Download klermonte/zerg library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
klermonte / zerg example snippets
// Describe your binary format in zerg language
$fieldCollection = new \Zerg\Field\Collection([
'stringValue' => ['string', 15],
'intValue' => ['arr', 5, ['int', 8]],
'enumValue' => ['enum', 8, [
0 => 'zero',
10 => 'ten',
32 => 'many'
], ['default' => 'not found']
]
]);
// Wrap your data in one of zerg streams
$sourceStream = new \Zerg\Stream\StringStream("Hello from zerg123456");
//Get your data structure
$data = $fieldCollection->parse($sourceStream);
print_r($data);
/*
Array
(
[stringValue] => Hello from zerg
[intValue] => Array
(
[0] => 49
[1] => 50
[2] => 51
[3] => 52
[4] => 53
)
[enumValue] => not found
)
*/
// Object notation
// --------------------------------------
// $field = new Int(<size>, <options>);
$field = new Int(4);
$field = new Int('byte', [
'signed' => true,
'formatter' => function($value) {
return $value * 100;
}
]);
// Array notation
// --------------------------------------
// $fieldArray = ['int', <size>, <options>];
// Object notation
// --------------------------------------
// $field = new String(<size>, <options>);
$field = new String(16);
$field = new String('short', [
'endian' => PhpBio\Endian::ENDIAN_BIG,
'formatter' => function($value) {
return str_repeat($value, 2);
}
]);
// Array notation
// --------------------------------------
// $fieldArray = ['string', <size>, <options>];
// Object notation
// --------------------------------------
// $field = new Padding(<size>);
$field = new Padding(16);
// Array notation
// --------------------------------------
// $fieldArray = ['padding', <size>];
// Object notation
// --------------------------------------
// $field = new Enum(<size>, <values>, <options>);
$field = new Enum(8, [0, 1, 2, 3]);
$field = new Enum('short', [
1234 => 'qwerty1',
2345 => 'qwerty2'
], [
'default' => 'abcdef'
]
);
// Array notation
// --------------------------------------
// $fieldArray = ['enum', <values>, <options>];
// Object notation
// --------------------------------------
// $field = new Conditional(<key>, <fields>, <options>);
$field = new Conditional('/path/to/key/value', [
1 => ['int', 32],
2 => ['string', 32]
], [
'default' => ['padding', 32]
]
);
// Array notation
// --------------------------------------
// $fieldArray = ['conditional', <fields>, <options>];
// Object notation
// --------------------------------------
// $field = new Arr(<count>, <field>, <options>);
$field = new Arr(10, ['int', 32]);
// Array notation
// --------------------------------------
// $fieldArray = ['arr', <field>, <options>];
// Object notation
// --------------------------------------
// $field = new Collection(<fields>, <options>);
$field = new Collection([
'firstValue' => ['int', 32],
'secondValue' => ['string', 32]
]);
// Array notation
// --------------------------------------
// $fieldArray = ['collection', <fields>, <options>];
// or just
// $fieldArray = <fields>;
$fieldCollection = new \Zerg\Field\Collection([
'count' => ['string', 2],
'intValue' => ['arr', '/count', ['int', 8]]
]);
$sourceStream = new \Zerg\Stream\StringStream("101234567890");
$data = $fieldCollection->parse($sourceStream);
print_r($data);
/*
Array
(
[count] => 10
[intValue] => Array
(
[0] => 49
[1] => 50
[2] => 51
[3] => 52
[4] => 53
[5] => 54
[6] => 55
[7] => 56
[8] => 57
[9] => 48
)
)
*/
$fieldCollection = new \Zerg\Field\Collection([
'count' => ['string', 2],
'conditional' => ['conditional', '/count', [
0 => ['string', 80],
10 => ['int', 16]
],
[
'default' => ['string', 2]
]
]
]);
$sourceStream = new \Zerg\Stream\StringStream("101234567890");
$data = $fieldCollection->parse($sourceStream);
print_r($data);
/*
Array
(
[count] => 10
[conditional] => 12849
)
*/