在PHP中读取文件的二进制代码...

Val*_*Val 5 php binary

如何读取文件的二进制代码(获取1和0).

$filename = "something.mp3";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
Run Code Online (Sandbox Code Playgroud)

我尝试了这个,但它显示了一些奇怪的字符......我认为这是格式化的二进制文件?我本来希望得到1和0.

此外我并不只是.mp3文件它可以是任何东西.eg: ,.txt,.doc,.mp4,,.php 等.....jpg.png

Mik*_*scu 12

文件确实以二进制形式存储在计算机上,但是1和0一起存储在8个组中(称为字节).现在,传统上,每个字节可以用ASCII字符表示,因为有256个可能的值可以用字节表示 - 这恰好与可用的不同ASCII字符的总数一致(这不是巧合)但实际上是按设计).

话虽这么说,你从fread函数中得到的是你应该得到的东西:即文件的内容.

如果你想看到1s an 0s你将需要打印你收到的每个字节的基本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);
}
Run Code Online (Sandbox Code Playgroud)

注意

如果你有一个1s和0s的字符串(一个字符的基数2表示),你可以将它转换回如下字符:

$base2string = '01011010';
$base10value = base_convert($base2string, 2, 10);  // => 132
$ASCIICharacter = chr($base10value);               // => 'Z'
echo($ASCIICharacter);                             // will print Z
Run Code Online (Sandbox Code Playgroud)

  • 请参阅我的回复中的说明.它显示了如何进行转换,但是在尝试编写自己的数据压缩算法之前,请进一步阅读有关位,字节和计算机表示数据的方式..在PHP中.. (5认同)

Hei*_*nzi 6

你去,1和0:

$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);