gpt4 book ai didi

php - 从十六进制获取 PHP 中的最低有效位

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:42:38 24 4
gpt4 key购买 nike

我有一个包含十六进制代码的文件,我需要从文件中的每个字节中获取所有最低有效位,将它们连接起来,将它们分成 8 组,然后将字节转换为 ASCII。我的问题是从每个字节中提取 LSB。

十六进制文件看起来像这样(但要长得多):

58 00 00 1F 58 00 00 00 00 00 00 00 00 00 00 1C 22 23 1F 26 25 1E 2C 26 20 31 2B 22 38 2F 26 42 36 25 47 37 24 49 39 22

我的代码是这样的:

<?php
// Read file, remove spaces
$file = implode('', explode(' ', file_get_contents('vogel.hex')));

// Save LSB
$bits = array();
for ($i = 1; $i < strlen($file); ++$i)
{
$bits[] = $file[$i] & 1;
}

// Split LSB array into chunks of 8 bits.
$bytes = array_chunk($bits, 8);

// Implode byte arrays, convert to decimal, convert to ASCII.
foreach ($bytes as $byte)
{
echo chr(bindec(implode('', $byte)));
}
?>

我认为拆分和转换部分应该可以正常工作,但我认为我在提取 LSB 时犯了一个错误。有人可以举例说明如何提取 LSB 吗?

我稍微编辑了我的代码,以便我开始读取位置 1 的位。然后十进制表示在 ASCII 范围内,脚本输出一个实际的 ASCII 字符。

最佳答案

您可以简单地在 for 循环中构建位串,跳过整个数组过程:

$bits = '';
for ($i = 1; $i < strlen($file); $i++) {
$bits .= (($file[$i] & 1) == 0) ? '0' : '1';
if ($i % 8 == 0) {
echo bindec($bits);
$bits = '';
}
}

当然,如果输入文件的大小不是 8 的倍数,您就会有一些悬垂位。

关于php - 从十六进制获取 PHP 中的最低有效位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6179664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com