Как я могу прочитать двоичный код (для получения 1 с и 0s) файла.
$filename = "something.mp3";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
Я попробовал это, но это показывает некоторые странные символы... Я предполагаю, что это - форматированный двоичный файл? Я надеялся добраться 1's и 0 вместо этого.
Также я не смотрю только .mp3
файлы это могло быть что-либо .e.g: .txt
, .doc
, .mp4
, .php
, .jpg
, .png
и т.д....
Файлы действительно хранятся на компьютере в двоичной форме, но единицы и нули хранятся вместе в группах по 8 (называемых байтами). Теперь, традиционно, каждый байт может быть представлен символом ASCII из-за того, что существует 256 возможных значений, которые могут быть представлены в байте, что совпадает с общим количеством различных доступных символов ASCII (это не совпадение но собственно по дизайну).
При этом то, что вы получаете от функции fread
, - это то, что вы должны получить: то есть содержимое файла.
Если вы хотите видеть 1 и 0
, вам нужно будет вывести каждый полученный байт в его представление 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);
}
ПРИМЕЧАНИЕ
Если у вас есть строка из единиц и нулей (представление символа по основанию 2), вы можете преобразовать ее обратно в символ следующим образом:
$base2string = '01011010';
$base10value = base_convert($base2string, 2, 10); // => 132
$ASCIICharacter = chr($base10value); // => 'Z'
echo($ASCIICharacter); // will print Z
Ну вот, единицы и нули:
$filename = "something.mp3"; $handle = fopen($filename, "rb"); $contents = fread($handle, filesize($filename)); for ($i = 0; $i < strlen($contents); $i++) { $binary = sprintf("%08d", base_convert(ord($contents[$i]), 10, 2)); echo $binary . " "; } fclose($handle);
Почему бы не использовать функцию PHP decbin
?
for($i = 0; $i < $fsize; $i++){
$base10value = ord($contents[$i]);
echo decbin($base10value);
}