Tsunamy_boy Posted April 28, 2008 at 05:01 PM Report Share #181984 Posted April 28, 2008 at 05:01 PM 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 More sharing options...
Guest id194 Posted April 28, 2008 at 06:23 PM Report Share #182037 Posted April 28, 2008 at 06:23 PM 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 More sharing options...
MX+ Posted April 28, 2008 at 06:38 PM Report Share #182055 Posted April 28, 2008 at 06:38 PM 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 More sharing options...
Tsunamy_boy Posted April 28, 2008 at 06:52 PM Author Report Share #182067 Posted April 28, 2008 at 06:52 PM 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 More sharing options...
Tsunamy_boy Posted April 28, 2008 at 06:59 PM Author Report Share #182069 Posted April 28, 2008 at 06:59 PM 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 More sharing options...
Warrior Posted April 28, 2008 at 07:08 PM Report Share #182072 Posted April 28, 2008 at 07:08 PM 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.. Link to comment Share on other sites More sharing options...
Triton Posted April 28, 2008 at 07:28 PM Report Share #182076 Posted April 28, 2008 at 07:28 PM 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 More sharing options...
Betovsky Posted April 28, 2008 at 07:48 PM Report Share #182081 Posted April 28, 2008 at 07:48 PM 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 More sharing options...
Tsunamy_boy Posted April 28, 2008 at 08:50 PM Author Report Share #182114 Posted April 28, 2008 at 08:50 PM 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 More sharing options...
MX+ Posted April 28, 2008 at 08:55 PM Report Share #182116 Posted April 28, 2008 at 08:55 PM 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 More sharing options...
Guest id194 Posted April 28, 2008 at 08:59 PM Report Share #182120 Posted April 28, 2008 at 08:59 PM Whatever... Link to comment Share on other sites More sharing options...
Triton Posted April 28, 2008 at 09:07 PM Report Share #182123 Posted April 28, 2008 at 09:07 PM Já que estás a usar C# procura pela class BitArray. 👍 <3 life Link to comment Share on other sites More sharing options...
Tsunamy_boy Posted April 28, 2008 at 09:26 PM Author Report Share #182132 Posted April 28, 2008 at 09:26 PM 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 More sharing options...
Warrior Posted April 28, 2008 at 09:38 PM Report Share #182139 Posted April 28, 2008 at 09:38 PM 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 More sharing options...
djthyrax Posted April 28, 2008 at 09:40 PM Report Share #182142 Posted April 28, 2008 at 09:40 PM 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 More sharing options...
pedrotuga Posted April 28, 2008 at 09:52 PM Report Share #182155 Posted April 28, 2008 at 09:52 PM 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 More sharing options...
Tsunamy_boy Posted April 28, 2008 at 10:23 PM Author Report Share #182188 Posted April 28, 2008 at 10:23 PM 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 More sharing options...
Warrior Posted April 28, 2008 at 10:25 PM Report Share #182191 Posted April 28, 2008 at 10:25 PM Os computadores fazem leituras de 32 bits até, não é 1 a 1 nem 8 a 8. Isto é bastante simples de fazer: basta ter 32 "fios" ligados em vez de 1.. Link to comment Share on other sites More sharing options...
Triton Posted April 28, 2008 at 10:26 PM Report Share #182192 Posted April 28, 2008 at 10:26 PM 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 More sharing options...
so_simple Posted April 29, 2008 at 11:40 AM Report Share #182269 Posted April 29, 2008 at 11:40 AM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now