Обращаем все биты в переменной с помощью PHP
Мне нужно прочитать двоичный файл в PHP, найти местоположение, обратить их биты и манипулировать результатом.
в настоящее время мой код выглядит так:
$src_file = "firmware/shapeshifter_v2.02.jic";
$offset = 983195;
if ($src_handle = fopen($src_file,"rb")) {
fseek($src_handle, $offset);
$src_content = fread($src_handle, 1024);
fclose($src_handle);
$src_content = $src_content & 128 >> 7 + $src_content & 64 >> 5 + $src_content & 32 >> 3 + $src_content & 16 >> 1 + $src_content & 8 << 1 + $src_content & 4 << 3 + $src_content & 2 << 5 + $src_content & 1 << 7;
print bin2hex($src_content);
}
Я пытаюсь перевернуть все биты из фрагмента с помощью алгоритма, найденного на этом форуме, но я не могу перевернуть более одного бита с ним.
У вас есть эффективное решение для обращения всех битов двоичной переменной в PHP?
Вот как это выглядит при ручном преобразовании:
3 ответа
Наконец, мне удалось обратить биты байта в PHP, используя следующий алгоритм:
$binary = decbin(ord($char));
$binary = str_pad($binary, 8, 0, STR_PAD_LEFT);
$binary = strrev($binary);
$reversednumber = bindec($binary);
$reversed = pack("C",$reversednumber);
во-первых, преобразовать байт в int и получить двоичное представление. Затем он заполняет его 0 до 8 символов. затем он переворачивает строку и собирает строку обратно в число. Последний шаг - снова упаковать его как однобайтовую строку.
Вы читаете 1024 байта в строку, а не один байт в число. Использование:
$src_content = ord(fread($src_handle, 1));
Это прочитает один байт, а затем преобразует его из символа в его числовой код. Затем вы можете обратить биты в этом числе, как вы делаете.
Чтобы обратить биты в двоичном значении, используйте как:
<?php
$binaryValue = 101010;
echo strtr($binaryValue,[1,0]);
?>
Это выведет: 010101
Надеюсь, поможет. Благодарю.