Обращаем все биты в переменной с помощью 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

Надеюсь, поможет. Благодарю.

Другие вопросы по тегам