Analisando um arquivo binário em PHP
Usando qualquer linguagem de baixo nível para armazenar um determinado valor, o código binário deve ser usado quando você carregá-lo em um editor de texto para registrá-lo ou lê-lo.
Um arquivo binário não pode ser lido como está no formato binário bruto em linguagens como Pascal. Portanto, os webmasters usam o PHP para ler e gravar os arquivos como texto. Uma função específica deve ser usada para recuperar seus valores.
O PHP usa uma função exclusiva chamada unpack (). Depois que o primeiro argumento de tipo de dados é declarado, você precisa recuperar e criar um segundo argumento como a string da qual deseja recuperar os dados. Os dados recuperáveis devem estar em argumentos simbólicos.
Ao usar linguagens de baixo nível como C ou Pascal, é um procedimento comum para armazenar dados em um arquivo binário (um registro que não pode ser traduzido em texto).
Usando a linguagem C, se você quiser salvar o valor 500 em um arquivo, o código será o seguinte:
#include int main () {int val = 500; FILE * fp = fopen ("arquivo", "wb"); fwrite (& val, sizeof (int), 1, fp); // armazena val em "arquivo" fclose (fp); return 0; }
Ao abrir esse arquivo específico com um editor de texto, você pode achá-lo ilegível porque seu valor não é salvo como texto, mas em sua forma bruta binária.
Mas, se você usa PHP, muitas vezes é necessário recuperar valores armazenados como binários de tempos em tempos. No entanto, o PHP lê e escreve nos arquivos como texto. Uma função específica deve ser usada para recuperar seus valores.
A solução:
A função unpack () pode ser usada para resolver este tipo de problema. Você deve primeiro declarar o tipo de dados que deseja recuperar e, em seguida, a sequência da qual deseja recuperar os dados.
O tipo de dados a recuperar deve ser detalhado usando o símbolo correspondente. Por exemplo, para recuperar um inteiro assinado, use o caractere i .
Então, se usarmos o arquivo que salvamos no exemplo acima, aqui está o código para recuperar nosso valor:
- Anotações importantes:
- O tamanho dos dados pode mudar dependendo da arquitetura do processador (Sparc, ARM, PowerPC).
- Um programa escrito em C usa números inteiros de tamanhos diferentes de 32 bits a 64 bits.
- A organização dos dados pode não ser a mesma. Algumas máquinas armazenam dados em Big Endian, outras em Little Endian.
- O tamanho dos dados pode variar dependendo do compilador
- A função descompactar retorna um array um pouco mais elaborado que o dado como exemplo aqui. No nosso caso, com um valor solicitado, nosso valor está no deslocamento 1 do array.
- Tipos de dados para um PC de 32 bits
- Aqui está uma tabela mostrando os dados gravados por um programa C compilado para um PC de 32 bits:
- char : c
- car anônimo : C
- curto : s
- curta não assinada : S
- int : eu
- int não assinado : L
- float : f
- duplo : d