Php string length binary options


Manipulação de dados binários em PHP com pack () e unpack (). Este blogpost foi publicado há mais de dois anos. Isso é muito tempo no mundo do desenvolvimento A história aqui pode não ser relevante, completa ou segura. Código pode não ser completa ou obsoleto, e até mesmo minha visão atual pode ter (completamente) mudou sobre o assunto. Então, por favor, leia mais, mas use-o com cautela. Hoje em dia a maioria de funcionalidade lowlevel como ler ou escrever gráficos são tomadas cuidado de bibliotecas de terceiros e thats ok. Sua maneira complicada de fazer as coisas direito e você provavelmente quer se concentrar em outputting ou enviar um PNG em vez de uma construção a partir do zero. Enquanto lendo e escrevendo este tipo de dados binários era normalmente feito em linguagens como C ou mesmo assembler, a maioria das linguagens de alto nível ainda têm esses recursos e sim, até mesmo o PHP Meet pack () e unpack (). A maioria das pessoas nem quer saber sobre como as coisas são feitas internamente e nem quer saber como uma bola de tar é parecida, ou como um arquivo PNG armazena suas paletas de cores. No entanto, se você é como eu, então você é curioso o suficiente e quer saber. Então, hoje eu vou mostrar-lhe como ler um arquivo PNG diretamente do disco e exibir as informações que está escondido atrás da imagem. Mesmo pode dizer-lhe um truque de otimização ou dois, entretanto :-) Primeiras coisas primeiro: pack () e unpack (). Ao lidar com dados binários em PHP, existem 2 funções principais que você não pode viver sem. As funções pack () e unpack () tomam uma seqüência (binária) e as convertem em uma matriz. Ambos trabalham mais ou menos da mesma maneira. Pack () irá armazenar uma matriz de volta para uma estrutura binária, enquanto unpack () fará o oposto. Se você escrever binarystring para um arquivo, seria 8 bytes de comprimento: 4 bytes para o comprimento (uma vez que seu valor de 32 bits), 3 bytes para o ascii aBc, 1 byte para cr e 1 byte para lf Com descompactar você tem que Adicione a chave, pois a saída é uma matriz associativa. Dê uma olhada ao redor no manual php para obter mais informações sobre pack () / unpack (). Formato PNG: O formato binário para arquivos PNG está disponível na internet. Ao visualizar um arquivo PNG em um visualizador ou editor hexadecimal, você verá que os primeiros 8 bytes são sempre os mesmos. O primeiro byte é sempre 0x89. Segundo a 4o byte são as letras PNG (ou em hexadecimal: 0x50 0x4E 0x47) 5º e 6º são os bytes 0x0d e 0x0a, o que representa uma linha DOS terminando em 7º e 8º bytes são 0x1a e 0x0a Então para verificar se um arquivo é Um PNG válido, precisamos fazer o seguinte: abrir o arquivo (como binário) ler os primeiros 8 bytes descompactar os bytes verificar se todas as entradas são o que esperamos abrir o arquivo (como binário): observe o b nas opções do arquivo. Isto irá certificar-se de que o ficheiro é aberto no modo binário. Leia os primeiros 8 bytes: os dados conterão uma string binária. Você não pode realmente lê-lo, então temos que descompactar os dados dele: Isso criaria uma matriz de cabeçalho com a seguinte informação: como você pode ver, a primeira entrada (highbit) é 137, que é o mesmo que 0x89. A assinatura é uma string normal com PNG e outros caracteres devem ser os mesmos que acima. Como exemplo, ele verifica se o highbit é realmente 0x89 e verifica o singnature para PNG. Você deve verificar os outros também .. Após o PNG cabeçalho, você obtém blocos de dados chamados pedaços. Cada pedaço é formatado da mesma maneira: 4 bytes. Comprimento do bloco 4 bytes. Tipo de bloco n bytes. Dados de bloco 4 bytes. Chunk CRC Antes de ler os dados do pedaço, devemos ler o comprimento do pedaço. Então a primeira coisa que fazemos é ler os primeiros 8 bytes (ou 2 dwords na verdade): Agora o número de bytes de dados são conhecidos para que possamos lê-los também: finalmente: lemos o código CRC e adicioná-lo à matriz chunk: Reading Todos os pedaços Ao ler um pedaço, você pode lê-los todos. Dependendo do tipo de pedaço, você pode realmente descompactar os dados e exibir ou usar essa informação também. Otimização Eu disse que estava compartilhando um truque de otimização no começo. Então aqui está: Como você pode ter visto, PNGs têm um monte de pedaços adicionais com eles. Incluindo coisas como a última vez que foi escrito e um monte de pedaços de texto. Uma vez que esses pedaços não são necessários para exibir o PNG corretamente, e eles só ocupam espaço, você poderia escrever um programa que remove esses pedaços do PNG. Especialmente com PNGs pequenos, isso pode economizar até 50 do tamanho do arquivo. Este é um truque que a maioria dos compressores de imagem usará para conseguir imagens de tamanho menor sem alterar até 1 byte na imagem real. Neat huh Capturas Os dados binários são tratados de forma diferente dependendo da sua CPU. A maioria das CPUs hoje em dia usa little-endian (intels x86 por exemplo), mas ainda há big-endian cpus lá fora (68000, powerpcs etc). Ao ler uma palavra ou dword a partir de dados binários, certifique-se de saber em que endian os dados são gravados caso contrário, você pode acabar com dados incorretos. Especialmente quando você deseja escrever dados binários, certifique-se de pensar em tudo. As coisas podem ficar muito complicadas e miswriting um único byte vai corromper toda a sua imagem. Há um monte de bibliotecas lá fora, que pode fazer essas coisas muito melhor do que você nunca vai. Mas isso não deve impedi-lo para tentar de qualquer maneira :-)

Comments

Popular posts from this blog

Scalping o e-mini futuros - forex

Online stock trading luxembourg

100 accurate binary options indicator for mt4155sp