Tengo un archivo con código hexadecimal y necesito obtener todos los bits menos significativos de cada byte en el archivo, concatenarlos, dividirlos en grupos de 8 y luego convertir los bytes en ASCII. Mi problema es extraer el LSB de cada byte.Obtiene Bit menos significativo en PHP desde Hex
El archivo hexadecimal se parece a esto (pero es mucho más larga):
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
Mi código es el siguiente:
<?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)));
}
?>
Creo que la división y la parte de conversión deberían funcionar correctamente, pero Creo que cometí un error al extraer el LSB. ¿Alguien puede dar un ejemplo de cómo puedo extraer el LSB?
He editado ligeramente mi código, de modo que empiezo a leer los bits en la posición 1. Entonces la representación decimal está dentro del rango ASCII y el script genera un carácter ASCII real.
El código es solo para un propósito de tiempo, por lo tanto, no me importó la velocidad o el bien. Pero tengo una pregunta. ¿Por qué inicias el ciclo con el índice 1 y importa si los espacios aún están dentro de la cadena $ file? –
En el momento en que escribí mi respuesta, tu loop comenzaba en 0, y supongo que fui descartado por el preincremento ('++ $ i') en la definición del ciclo. –