Skip to content

Commit c934265

Browse files
Refactored Unpacker. Fixed packing BigEndian.
1 parent e0b1b57 commit c934265

File tree

3 files changed

+133
-176
lines changed

3 files changed

+133
-176
lines changed

Packer.php

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,19 +124,27 @@ private function packFloat(float $value): string
124124
private function packInteger(int $value): string
125125
{
126126
$output = '';
127+
$tmp = unpack('S', "\x01\x00");
128+
$little = $tmp[1] == 1;
127129

128130
if ($value > -1 && $value < 127) { //+TINY_INT
129-
$output .= pack('C', 0b00000000 | $value);
131+
$packed = pack('C', 0b00000000 | $value);
132+
$output .= $little ? strrev($packed) : $packed;
130133
} elseif ($value > -16 && $value < 0) { //-TINY_INT
131-
$output .= pack('c', 0b11110000 | $value);
134+
$packed = pack('c', 0b11110000 | $value);
135+
$output .= $little ? strrev($packed) : $packed;
132136
} elseif ($value > -128 && $value < -17) { //INT_8
133-
$output .= chr(0xC8) . pack('c', $value);
137+
$packed = pack('c', $value);
138+
$output .= chr(0xC8) . ($little ? strrev($packed) : $packed);
134139
} elseif (($value > 128 && $value < 32767) || ($value > -32768 && $value < -129)) { //INT_16
135-
$output .= chr(0xC9) . pack('s', $value);
140+
$packed = pack('s', $value);
141+
$output .= chr(0xC9) . ($little ? strrev($packed) : $packed);
136142
} elseif (($value > 32768 && $value < 2147483647) || ($value > -2147483648 && $value < -32769)) { //INT_32
137-
$output .= chr(0xCA) . pack('l', $value);
143+
$packed = pack('l', $value);
144+
$output .= chr(0xCA) . ($little ? strrev($packed) : $packed);
138145
} elseif (($value > 2147483648 && $value < 9223372036854775807) || ($value > -9223372036854775808 && $value < -2147483649)) { //INT_64
139-
$output .= chr(0xCB) . pack('q', $value);
146+
$packed = pack('q', $value);
147+
$output .= chr(0xCB) . ($little ? strrev($packed) : $packed);
140148
} else {
141149
throw new Exception('Integer out of range');
142150
}

0 commit comments

Comments
 (0)