PHP如何将WAV文件二进制转为单个字符元素的数组?
解决方案:将WAV文件的二进制位存入单个字符数组
嘿,这事儿不难!你只需要在现有代码基础上,把每个字节生成的8位二进制字符串拆成单个字符,再逐个(或者批量)加入到目标数组里就行。我给你修改好完整代码,再给你解释关键步骤:
// 初始化存储每个二进制位的数组 $bitArray = []; // 读取WAV文件内容 $filename = "rock.wav"; $handle = fopen($filename, "rb"); $contents = fread($handle, filesize($filename)); fclose($handle); // 别忘了关闭文件句柄哦! // 遍历每个字节 for($i = 0; $i < strlen($contents); $i++) { $char = $contents[$i]; // 转成十进制再转成8位补零的二进制字符串 $binaryStr = str_pad(decbin(ord($char)), 8, "0", STR_PAD_LEFT); // 把8位字符串拆成单个字符的数组,合并到总数组里 $bitArray = array_merge($bitArray, str_split($binaryStr)); } // 测试:打印前20个元素看看效果 print_r(array_slice($bitArray, 0, 20));
关键步骤解释:
- 首先初始化一个空数组
$bitArray,用来存每个单独的0/1字符。 - 用
str_split($binaryStr)把8位的二进制字符串直接拆成包含8个单个字符的子数组,比如"01010010"会变成['0','1','0','1','0','0','1','0']。 - 用
array_merge把每个子数组的元素合并到总数组里,这样最终$bitArray的每个索引就对应一个二进制位的字符了。
如果你不想用array_merge,也可以用循环逐个添加,效果是一样的:
// 替代array_merge的写法 foreach(str_split($binaryStr) as $bit) { $bitArray[] = $bit; }
这样处理完之后,$bitArray就是你想要的——每个元素都是单个的'0'或'1'字符,顺序和文件字节的二进制位完全对应。
内容的提问来源于stack exchange,提问作者hizz
相关产品推荐
相关产品推荐

