Files
midi-php/extend/shengwang/src/Util.php
2025-08-13 10:43:56 +08:00

84 lines
2.1 KiB
PHP

<?php
class Util
{
public static function assertEqual($expected, $actual)
{
$debug = debug_backtrace();
$info = "\n- File:" . basename($debug[1]["file"]) . ", Func:" . $debug[1]["function"] . ", Line:" . $debug[1]["line"];
if ($expected != $actual) {
echo $info . "\n Assert failed" . "\n Expected :" . $expected . "\n Actual :" . $actual;
} else {
echo $info . "\n Assert ok";
}
}
public static function packUint16($x)
{
return pack("v", $x);
}
public static function unpackUint16(&$data)
{
$up = unpack("v", substr($data, 0, 2));
$data = substr($data, 2);
return $up[1];
}
public static function packUint32($x)
{
return pack("V", $x);
}
public static function unpackUint32(&$data)
{
$up = unpack("V", substr($data, 0, 4));
$data = substr($data, 4);
return $up[1];
}
public static function packInt16($x)
{
return pack("s", $x);
}
public static function unpackInt16(&$data)
{
$up = unpack("s", substr($data, 0, 2));
$data = substr($data, 2);
return $up[1];
}
public static function packString($str)
{
return self::packUint16(strlen($str)) . $str;
}
public static function unpackString(&$data)
{
$len = self::unpackUint16($data);
$up = unpack("C*", substr($data, 0, $len));
$data = substr($data, $len);
return implode(array_map("chr", $up));
}
public static function packMapUint32($arr)
{
ksort($arr);
$kv = "";
foreach ($arr as $key => $val) {
$kv .= self::packUint16($key) . self::packUint32($val);
}
return self::packUint16(count($arr)) . $kv;
}
public static function unpackMapUint32(&$data)
{
$len = self::unpackUint16($data);
$arr = [];
for ($i = 0; $i < $len; $i++) {
$arr[self::unpackUint16($data)] = self::unpackUint32($data);
}
return $arr;
}
}