Файлы хранятся на компьютере в двоичном виде, но 1 и 0 хранятся вместе в группах по 8 (называемых байтами). Теперь, традиционно, каждый байт может быть представлен символом ASCII из-за того факта, что в байте может быть представлено 256 возможных значений, которые совпадают с общим количеством доступных символов ASCII (это не было совпадением но на самом деле по замыслу).
Как говорится, то, что вы получаете от функции fread
, это то, что вы должны получить: то есть содержимое файла.
Если вы хотите увидеть 1s an 0s
, вам нужно будет распечатать каждый полученный вами байт в виде base 2 . Вы можете достичь этого, используя такую функцию, как base_convert или написав свою собственную.
$filename = "something.mp3";
$handle = fopen($filename, "rb");
$fsize = filesize($filename);
$contents = fread($handle, $fsize);
fclose($handle);
// iterate through each byte in the contents
for($i = 0; $i < $fsize; $i++)
{
// get the current ASCII character representation of the current byte
$asciiCharacter = $contents[$i];
// get the base 10 value of the current characer
$base10value = ord($asciiCharacter);
// now convert that byte from base 10 to base 2 (i.e 01001010...)
$base2representation = base_convert($base10value, 10, 2);
// print the 0s and 1s
echo($base2representation);
}
Примечание
Если у вас есть строка 1 и 0 (базовое представление 2 символа), вы можете преобразовать ее обратно в символ следующим образом:
$base2string = '01011010';
$base10value = base_convert($base2string, 2, 10); // => 132
$ASCIICharacter = chr($base10value); // => 'Z'
echo($ASCIICharacter); // will print Z