• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Tsunamy_boy

pergunta sobre binario

46 mensagens neste tópico

Nunca dei binário e o básico que sei é que é escrito em 0 e 1 :biggrin:

A pergunta é:

qualquer ficheiro pode ser aberto e apresentado em binário?

ex: eu posso abrir um ficheiro TXT que foi escrito com texto normal e este aparecer em 0's e 1's?

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Imprimes a representação em base 2 de cada um dos caracteres.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

djthyrax

explica-me melhor isso pois eu nao sei nada de binário.

se tiveres algum site onde eu possa ver isso diz

Warrior

nao percebi o que disseste, eu sou novo aqui

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

djthyrax

explica-me melhor isso pois eu nao sei nada de binário.

se tiveres algum site onde eu possa ver isso diz

Warrior

nao percebi o que disseste, eu sou novo aqui

Desculpa, foi um erro meu. Confundi os tópicos.

Tipicamente, cada caracter do teu ficheiro de texto é convertido em 8 bits. Tens portanto 256 possibilidades, que dá os 0 a 255 caracteres da tabela ascii.

Ler um ficheiro não é mais do que ler grupos de 8 bits da memória e converter num caracter.

Tenta perceber que o PC internamente armazena tudo em binário, portanto obviamente que podes converter.

Tens aqui uma tabela ascii:

http://www.asciitable.com/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim eu percebi isso da tabela ascii, a cada caracter corresponde um numero inteiro de 0 a 256 e 1 byte corresponde a esses 8bits

o que não consigo é converter.

por exemplo o caracter A como fica e explica pork

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes abrir qualquer ficheiro com um editor de hexadecimal e ver o seu conteudo em hexadecimal.

Em hexadecimal, porque é uma base que é potencia de 2, é possivel fazer uma correspondencia direta entre um símbolo hexadecimal e quatro síbolos binários.

Que é como quem diz: cada dois simbolos hexadecimais são um byte.

Eu uso o Ghex, para windows não sei como se chamam os editores de hexadecimal que existem:

google->free hexadecimal editor

Cria um ficheiro de texto e escreve la coisas, depois abre com o editor de hexadecimal para veres a correspondencia.

Os editores de hexadecimal normalmente permitem ver tambem o conteudo em binário, zeros e uns. Ou seja, são tambem no fim de contas editores de binário.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Converter à mão, the simplest way:

Vais a uma tabela ASCII table e vês a representação em decimal do caracter http://ascii-table.com/

Exemplo: A -> 65

Para converter para binário podes ou ir contanto até ao 65 (não é mt prático), ou então usar o resto das divisões (alguém que explique este método). Contanto à mão:

0 -> 00000000

1 -> 00000001

2 -> 00000010

3 -> 00000011

4 -> 00000100

5 -> 00000101

6 -> 00000110

7 -> 00000111

8 -> 00001000

...

61 -> 00111100

61 -> 00111101

62 -> 00111110

63 -> 00111111

64 -> 01000000

65 -> 01000001

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ahhhhhhhhhhhhh entao pego no indice da tabela ascii e somo +1 ao binário, ok!

somar em binário sei, quer dizer sigo a ordem e nao me engano :P

Brigadão isto era basico ate

já agora sabem a formula para achar logo o caracter correspondente?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

conheces maneira de converter texto para binario?

Abres o ficheiro em modo binário.

Les bit a bit

  Se bit for 1 -> imprime '1'

  Senao        -> imprime '0'

Não uses a tabela ASCII para converter para binário, porque se o ficheiro for de texto, não significa que o texto esteja a usar o encoding ASCII.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o que eu pretendo é fazer um compressor de ficheiros e vi solução no binário...

talvez o algoritmo funcione, não sei...estou a começar a ter duvidas...

pois ai a codificação também é um problema....principalmente porque pretendo comprimir todo o tipo de ficheiros...

dá para criar a minha própria codificação e guarda-la no disco?

ou isso é um porcesso muito complexo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É melhor não entrarmos por aí, unicode é confusão desnecessária para quem está a começar. Não deixa de ser verdade o que disseste, claro.

Repara que um ficheiro de texto é um caso particular. Qualquer ficheiro é representável em 0 e 1s, portanto para comprimires/descomprimires um ficheiro, só tens que usar um algoritmo que pegue num conjunto de bits, converta para outro formato qualquer, e depois vice-versa.

Independentemente do tipo de ficheiro que é, este método garantidamente funciona.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Warrior

é essa a minha ideia, agora guardar isso no disco é complicado.

tipo:

o que eu pretendo é codificar de 8 em 8 caracteres binários, ou seja pretendo codificar bytes a partir de bits e guardar o resultado em numero inteiro.

tipo:

000000000 - 0

000000001 - 1

000000010 - 2

000000011 - 3

000000100 - 4

(...)

como vês a codificação fica muito menor, passas de 8 caracteres a 3(não sei ate onde vai o "11111111" mas deve ir nos cento e tais...)

agora guardar números inteiros como se fossem bits é que deve ser complicado e converter o numero inteiro para binário (outra vez) ia aumentar o ficheiro e não diminui-lo, pois converter um numero inteiro com 2caracteres para binário ficava com 16caracteres(no resultado final) em vez dos 2 desejados

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só podes guardar 0s e 1s, não consegues guardar o "2" num ficheiro.

00000000 já é a representação do 0, portanto não há nada a fazer.

Há certas compressões que é possível fazer: imagina que sabes que os teus números só vão de 0 a 10. Para isso, só precisas de 4 bits. Assim, em vez de guardares cada número no seu byte, podes guardar 2 em cada byte. Mas isto assume sempre que conheces algo mais do que um ficheiro "qualquer".

Tenta ler sobre algoritmos simples de compressão, esquecendo o binário.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não foi isso que disse. Tu só podes é gravar bits. Ou seja, 0s e 1s, não podes gravar o "2".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim eu percebi isso.

e ja vi que se pode escrever quantos bits quiseres num ficheiro.

outra pergunta, há maneira de separar os bits?não pois não? tem que ser tudo seguido, dai os 8bits representarem uma letra da tabela ASCII, assim o SO lê de 8 em 8 e já sabe a que caracter cerresponde, estou certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Exactamente.

Já agora, fica sabendo que apesar da memória estar organizada em segmentos de 8 bits (1 byte) as operações nos processadores actuais são executadas sobre blocos de 32bits.

Facilmente consegues perceber porquê:

- Representar um número em 8 bits tens 256 hipóteses. É pouco. 32 bits já te permitem 2^32, 10 digitos se o representares em decimal. É suficiente para grande parte das aplicações do dia-a-dia. Apesar de ser possível representar números maiores, claro. (Podes sempre usar blocos "lado-a-lado").

- As operações de 32 bits (adições, ANDs, ORs, XORs, etc) são simultâneas, o que se traduz numa maior rapidez.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

então eu posso fazer isto para a compactação:

faço palavras de 10bits(por ex) e somo 2bytes(convertidos para bits) o que sobra acrescento com zeros..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebi o que queres fazer. Principalmente o facto de quereres acrescentar 0s e dizeres que poupas espaço..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

há visto bem não da, pois depois não sei como repor os dois bytes.

a ideia era fazer a soma de 2bytes e devolvia um resultado menor k 16caracteres.

tipo:

  00000000

+00000001

  00000000 (se não me engano)

isto passado umas somas ficava maior que 8 caracteres dai ter falado no 10.

mas isto não dá, já vi...

Já agora: tudo o que é gravado no disco fica em bits ou também é gravado hexadecimal e afins?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes converter de hexadecimal em binário e vice-versa, portanto isso é irrelevante.

0+1 = 1, nunca 0.

Tu não podes guardar a soma de dois bytes consecutivos, porque depois não sabes quais os dois operandos, visto existirem vários pares que geram a soma guardada.

Mais uma vez, aconselho-te a ler sobre o assunto.

http://pt.wikipedia.org/wiki/Algoritmo_de_compress%C3%A3o

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mas o que é gravado no disco é bits nê?

pois eu já não me lembro muito bem das somas...

0+1 = 1

0+0 = 0

1+1= 1 (e vai 1)

(é isto nê?)

eu vou ler o que me des-t obrigadão :P

Já agora aconselhas comprimir bits ou bytes o que se torna mais fácil?  :hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nunca vais conseguir comprimir um bit.

Aconselho-te a ler mais sobre o assunto. As técnicas actuais envolvem todas encontrar um padrão nos ficheiro a comprimir.

Caso queiras mais prática e menos teoria, lê por exemplo sobre a codificação RLE (run length encoding)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora