PHP-Code:
<?php
error_reporting(E_ALL | E_STRICT);
function get_ID3v2_tag_size_by_hex($hex)
{
$hex = preg_replace("/[^A-Fa-f0-9]/", "", $hex);
if (strlen($hex) != 8) {
return false;
}
$hex4 = substr($hex, 0, 2); // most significant
$hex3 = substr($hex, 2, 2);
$hex2 = substr($hex, 4, 2);
$hex1 = substr($hex, 6, 2);
#echo "<br />";
#var_dump($hex4, $hex3, $hex2, $hex1);
// there is no hexbin(), use workaround
$dec4 = hexdec($hex4);
$dec3 = hexdec($hex3);
$dec2 = hexdec($hex2);
$dec1 = hexdec($hex1);
#echo "<br />";
#var_dump($dec4, $dec3, $dec2, $dec1);
$err4 = $dec4 > 127;
$err3 = $dec3 > 127;
$err2 = $dec2 > 127;
$err1 = $dec1 > 127;
#echo "<br />";
#var_dump($err4, $err3, $err2, $err1);
if ($err4 || $err3 || $err2 || $err1) {
return false;
}
$bit4 = decbin($dec4); // still most significant
$bit3 = decbin($dec3);
$bit2 = decbin($dec2);
$bit1 = decbin($dec1);
#echo "<br />";
#var_dump($bit4, $bit3, $bit2, $bit1);
// zero-fill
$bit4 = str_pad($bit4, 7, "0", STR_PAD_LEFT);
$bit3 = str_pad($bit3, 7, "0", STR_PAD_LEFT);
$bit2 = str_pad($bit2, 7, "0", STR_PAD_LEFT);
$bit1 = str_pad($bit1, 7, "0", STR_PAD_LEFT);
#echo "<br />";
#var_dump($bit4, $bit3, $bit2, $bit1);
$bit4321 = ltrim($bit4 . $bit3 . $bit2 . $bit1, "0");
#echo "<br />";
#var_dump($bit4321);
$int4321 = bindec($bit4 . $bit3 . $bit2 . $bit1);
return $int4321;
}
$example = "0A 0B 0C 0D";
echo "<br />";
var_dump(get_ID3v2_tag_size_by_hex($example));
$example = "00 00 02 01";
echo "<br />";
var_dump(get_ID3v2_tag_size_by_hex($example));
Kommentar