Jump to content

Posso ter quantos bits eu quiser num ficheiro?


Tsunamy_boy
 Share

Recommended Posts

Os ficheiros têm que ser gravados obrigatoriamente com bytes certos? Não podem haver meios bytes (do género 4bits)?

Melhor:

Posso criar um ficheiro com 1bit apenas?

É que ando á procura de como gravar em C# bit a bit e não encontro nada, a única hipótese que há é gravar byte a byte, mas isso não me ajuda muito...

É possível, não é possível?

Link to comment
Share on other sites

  • Replies 49
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Guest id194

Desculpa lá mas eu tenho de ser directo... Tu não achas que estas a tentar inventar a roda? Não achas que o que tu queres fazer já não foi pensado mais de mil vezes desde que existem computadores?

Eu não percebo muito do assunto mas tu também pareces não perceber e eu acho que falta é teres alguma noção de arquitectura de computadores e algo me diz que o que queres fazer não é possível devido à arquitectura do computador.

Eu acho que não estou errado apesar de não perceber quase nada do assunto, mas tenho um feeling que isso não é possível por isso recomendo-te que leias mais sobre arquitectura de computadores.

Link to comment
Share on other sites

Na prática no minimo cada ficheiro tem o tamanho dum bloco. Os discos rigidos são dividos em clusters, e depois em blocos.

Se depois um ficheiro precisar de mais espaço, vai requisitando mais blocos.

E para esclarecer os ficheiros são guardados de bit em bit. Mas convencionou-se a leitura/escrita de 8 em 8. Mas podes ler/escrever em qualquer quantidade que queiras.

Cumprimentos

Links:

http://en.wikipedia.org/wiki/Block_(data_storage)

Link to comment
Share on other sites

Já deves ter lido os meu tópicos de compressão e todos foram um fracasso...ok eu admito.mas já pensei noutro e não vou falar nele até ter certeza que funciona para não cometer o mesmo erro de estar a afinar coisas erradas.mas ok.a pergunta não passava por aí.eu apenas quero saber se e possível gravarmos os bits que quisermos num ficheiro apenas isso.pois em c# não vejo código para isso.caso não exista eu arranjo maneira de acrescetar os que faltam(se essa for a única solução).

Link to comment
Share on other sites

Na prática no minimo cada ficheiro tem o tamanho dum bloco. Os discos rigidos são dividos em clusters, e depois em blocos.

Se depois um ficheiro precisar de mais espaço, vai requisitando mais blocos.

E para esclarecer os ficheiros são guardados de bit em bit. Mas convencionou-se a leitura/escrita de 8 em 8. Mas podes ler/escrever em qualquer quantidade que queiras.

Cumprimentos

Links:

http://en.wikipedia.org/wiki/Block_(data_storage)

obrigado.

Eu não pretendo escrever de 8em8bits vai mudando conforme a estrutura do ficheiro ou leio de 4em4 ou de 8em8 (aqui de 4em4 são comandos ou informações da compressão de dados são como declarações de algo)

Link to comment
Share on other sites

Os sistemas de ficheiros normalmente funcionam à base de blocos, o tamanho mínimo costuma ser 4kB ou 4096 bytes.

Mas isso não invalida que possas criar ficheiros com 1 byte. Tenta criar um ficheiro .txt com um caracter, e se fores às propridades do ficheiro vais reparar que o tamanho é de 1 byte enquanto o tamanho em disco é de 4kB.

Mas se percebi o que tu queres, é nesse mesmo byte, poder utilizar os 8 bits para armazenar informação, e essa é uma técnica bastante utilizada para poupar memória.

Bitwise operations.

<3 life

Link to comment
Share on other sites

Nazgulled não vejo onde está o problema. Uma pessoa aprende a fazer coisas que já estão feitas.

Em relação à dúvida. Acho que o pessoal não percebeu lá muito bem. Ele quer saber se pode escrever num ficheiro um número qualquer de bits.

Os blocos não são chamados ao assunto. Mesmo se um ficheiro ocupar 1 kb e o bloco for de 4 kb. Do lado do código quando se for ver o ficheiro, só irá ter 1kb de dados, não irá ter 4kb.

Agora respondendo à dúvida, eu não acho que seja possível criar um ficheiro com um número qualquer de bits. Penso que tem que ser escrito sempre byte a byte, ou seja, o número total de bits num ficheiro tem de ser múltiplo de 8. Mas não tenho a certeza e posso estar completamente errado.

A questão é: É possível criar um ficheiro só com 1 bit? (Independentemente do tamanho que o ficheiro ocupa fisicamente no disco)

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Link to comment
Share on other sites

Agora respondendo à dúvida, eu não acho que seja possível criar um ficheiro com um número qualquer de bits. Penso que tem que ser escrito sempre byte a byte, ou seja, o número total de bits num ficheiro tem de ser múltiplo de 8. Mas não tenho a certeza e posso estar completamente errado.

A questão é: É possível criar um ficheiro só com 1 bit? (Independentemente do tamanho que o ficheiro ocupa fisicamente no disco)

Sim a duvida é mesmo essa...

Normalmente o que se faz é ler um bloco grande e depois trabalhar como quisermos, e voltar a gravar o bloco de uma vez.

E quando digo grande é mesmo grande, porque mesmo ler um byte de cada vez é um desperdício de recursos..

Eu pretendo ler o ficheiro byte a byte como normalmente se faz e espalhar tudo uma caixa de texto,onde uso o meu metudo de compressão, depois tenho q guardar tudo bit a bit pois tenho declarações de várias coisas que vão ter apenas 2bts ou 4 ou 5 ou até 1(que seguem sempre a mesma estrutura), nunca 8 ao certo e o resultado não vai ser multiplo de 8 logo á partida

Link to comment
Share on other sites

OK então respondendo directamente à tua dúvida: Podes gravar quantos bits quiseres, porque basicamente se tiveres:

01011011 1000000000000000000....

Tens 9 bits guardados, embora o sistema de ficheiros considere que são 16 (2 bytes). Sim o sistema de ficheiros apenas te permite guardar bytes (bits múltiplos de 8), mas se retirares a redundancia dos zeros no teu algoritmo consegues implementar o que pretendes.

Cumprimentos

Link to comment
Share on other sites

OK então respondendo directamente à tua dúvida: Podes gravar quantos bits quiseres, porque basicamente se tiveres:

01011011 1000000000000000000....

Tens 9 bits guardados, embora o sistema de ficheiros considere que são 16 (2 bytes). Sim o sistema de ficheiros apenas te permite guardar bytes (bits múltiplos de 8), mas se retirares a redundancia dos zeros no teu algoritmo consegues implementar o que pretendes.

Cumprimentos

Ah!!! obrigado... agora o prob e encontrar maneira de gravar bits num ficheiro em c#, caso alguem saiba como, diga-me neste topico:

http://www.portugal-a-programar.pt/forums/topic/0-find-topic/?do=findComment&comment=181172

Cumprimentos e obrigado a todos

Já que estás a usar C# procura pela class BitArray. 👍

BitArray ja descobri cenas sobre isso mas depois é gravado em bytes...

Link to comment
Share on other sites

Não achas que chega de tópicos criados? Se continua neste ritmo vou ser forçado a fazer merge de uma carrada de tópicos teus.

A discussão pode perfeitamente continuar neste tópico, não há necessidade de voltar a mudar.

Não há forma de escrever bit a bit num ficheiro, mas cabe-te a ti transformar os teus conjuntos de 4/5/6/whatever bits em blocos de 8 a ser escritos.

Link to comment
Share on other sites

Sinceramente, não percebo qual é a crise de usar não usar um byte completamente. Se precisas de usar 9 bits, usas 2 bytes, e enches o espaço que não precisas com 0:

10101010100000000

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other sites

com o mx disse... se quiseres criar um ficheiro com um numero de bits que não seja multiplo de oito, para todos os efeitos o ficheiro vai 'ter' os restantes bits até ocupar um byte. Não sei em particular o que acontece, se os restantes bits ficam como estão, se são postos a zeros, ou 1s.

Isto porque os nossos computadores não têm capacidade de endereçamento bit a bit, só conseguem usar endereços de memória que byte a byte.

Por exemplo, mandas o processador ir ler o byte que está no endereço de memória X, esse endereço corresponde SEMPRE ao início de um byte.

Uma coisa que é importante aqui e que gostava de poder esclarecer melhor mas infelizmente n tenho conhecimento para isso, é o tamanho do fichieiro no sistema de ficheiros usado.

O sistema de ficheiros como já foi aqui dito reserva espaço byte a byte, mas tem tambem que conter informação sobre o tamanho dos ficheiros, se assim não fosse, quando abrias um ficheiro, este ia ser lido até ao final do último bloco que usa.

Eu não sei como são os cabeçalhos/tabelas dos sistemas de ficheiros.

Acho que os comprimentos dos ficheiros são sempre em bytes, tenho quase a certeza, se alguem estiver mais por dentro deste assunto, por favor confirme.

Link to comment
Share on other sites

Não sei...eu acho que o computador vai ter que ler bit a bit e não byte a byte pois 1byte e um grupo de 8bits e eu duvido que ele leia grupos de 8em8bits de cada vez,apenas o faz para interpretação de caracteres e os escrever.penso que seja assim mas também posso tar errado.

Link to comment
Share on other sites

Eu não sei como são os cabeçalhos/tabelas dos sistemas de ficheiros.

Acho que os comprimentos dos ficheiros são sempre em bytes, tenho quase a certeza, se alguem estiver mais por dentro deste assunto, por favor confirme.

A forma como o sistema de ficheiros armazena informação não tem grande relevância para este problema, o que interessa é que devolva o tamanho certo (em bytes). 😁

É possível fazer um sistema de ficheiros que permita escrita bit-a-bit, mas não vejo a utilidade disso. Além disso, o sistema de ficheiros teria de utilizar bytes na mesma para armazenar a informação, porque como o pedrotuga já disse, é a forma de endereçamento do CPU.

Os computadores fazem leituras de 32 bits até, não é 1 a 1 nem 8 a 8.

Isto depende da arquitectura, mas por exemplo na Intel x86 podes ler qwords (64 bits), dwords (32 bits), words (16 bits) ou bytes (8 bits)  - p. ex. o registo EAX (32 bits) -> AX (16 bits) -> AH/AL (8 bits) .

<3 life

Link to comment
Share on other sites

o que estas a pensar é mais uma questão do modo como os SOs funcionam e as APIs. Penso que não há nenhum SO que tenha APIs para manipular bits como queres.Ate a arquitectura dos pcs nao permite. A possibilidade que tens e manipular 8 bits em assembly.

Acho que o que tu queres é de o mais baixo nivel que há.

nivel de assembly e não de C++

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.