Leminski Posted June 19, 2016 at 01:32 AM Report #597259 Posted June 19, 2016 at 01:32 AM Boa noite. Tenho um projecto da universidade onde se pretende receber um ficheiro com char's (0 ou 1) e escrever bit's (0 ou 1) e não faço ideia de como tratar disto. Sugestões?
HappyHippyHippo Posted June 19, 2016 at 01:34 AM Report #597260 Posted June 19, 2016 at 01:34 AM a explicação do problema é ... "deficiente" IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Leminski Posted June 19, 2016 at 01:47 AM Author Report #597261 Posted June 19, 2016 at 01:47 AM Não percebi
HappyHippyHippo Posted June 19, 2016 at 01:55 AM Report #597262 Posted June 19, 2016 at 01:55 AM explica melhor o que é pretendido fazer, assim como qual é realmente a dúvida IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Leminski Posted June 19, 2016 at 02:09 AM Author Report #597263 Posted June 19, 2016 at 02:09 AM (edited) Basicamente tem que ver com compressão. Queremos codificar um ficheiro de texto "0"s e "1"s. Até aí tudo bem. Posteriormente, esse ficheiro de char's com "0"s e "1"s deve ser reescrito para os "0"s e "1"s serem efetivamente bits 0 e 1. Quanto a dúvida... é sobre como fazer isso. Edited June 19, 2016 at 02:09 AM by Leminski
HappyHippyHippo Posted June 19, 2016 at 08:19 AM Report #597264 Posted June 19, 2016 at 08:19 AM dizer que a dúvida é "como fazer isso", não descreve uma dúvida. isto porque uma resposta a uma questão dessas equivale ao enunciado, que no final não resulta em nada de produtivo. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PsySc0rpi0n Posted June 19, 2016 at 08:54 AM Report #597265 Posted June 19, 2016 at 08:54 AM Não sei se percebi bem qual é o objectivo... Deixa cá ver se percebi. Tens um ficheiro com carateres '0' e '1' e queres ler esses caracteres e converter para valores numéricos 0 e 1 e voltar a escrever no ficheiro??? Se é isto, acho que nem faz muito sentido, ou então não percebi o objectivo! Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
pwseo Posted June 19, 2016 at 11:07 AM Report #597267 Posted June 19, 2016 at 11:07 AM Leminski, Consegues exemplificar o que estás a tentar fazer? A tua explicação não foi particularmente clara. Nós já compreendemos o que parece ser pretendido que faças, mas será que tu compreendeste? Coloca aqui um exemplo de input para o teu programa e do output que esperas dele. E logicamente, clarifica melhor o que fizeste até agora e em que parte tens dúvidas, caso contrário não irás obter grande ajuda.
seuqram Posted June 19, 2016 at 02:04 PM Report #597273 Posted June 19, 2016 at 02:04 PM (edited) tipo(int,char ou bool) byte[8]; char c = carater; for (unsigned int i = 0; i < 8; ++i) { byte[i] = (c >> i) & 1; } Ou então usa isto: http://www.cplusplus.com/reference/bitset/bitset/ Edited June 19, 2016 at 02:04 PM by seuqram
HappyHippyHippo Posted June 19, 2016 at 07:50 PM Report #597281 Posted June 19, 2016 at 07:50 PM (edited) tipo(int,char ou bool) byte[8]; char c = carater; for (unsigned int i = 0; i < 8; ++i) { byte[i] = (c >> i) & 1; } a ideia parece estar correcta mas a implementação é que falha vamos ver se o criador do tópico chega lá Ou então usa isto: http://www.cplusplus.com/reference/bitset/bitset/ não num tópico da seção de C, e não C++ --- ps : tenho a solução para este problema feito no ideone (completo e a correr) em 9 linhas, com esta informação é possível ver que não é nada de mais Edited June 20, 2016 at 07:21 AM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Leminski Posted June 19, 2016 at 07:56 PM Author Report #597282 Posted June 19, 2016 at 07:56 PM tipo(int,char ou bool) byte[8]; char c = carater; for (unsigned int i = 0; i < 8; ++i) { byte[i] = (c >> i) & 1; } Ou então usa isto: http://www.cplusplus.com/reference/bitset/bitset/ Podes-me explicar a penúltima linha do código?
seuqram Posted June 19, 2016 at 10:02 PM Report #597283 Posted June 19, 2016 at 10:02 PM (edited) Podes-me explicar a penúltima linha do código? byte[i] = (c >> i) & 1; byte[i] = (Define um dos 8 elementos do buffer "byte" que representam os "bits") (c >> i) Obtêm os bits do carater 'c' apartir do bit 'i' & 1 Chama-se bit mask: https://en.wikipedia.org/wiki/Mask_(computing) Edited June 19, 2016 at 10:41 PM by seuqram
Leminski Posted June 19, 2016 at 10:28 PM Author Report #597284 Posted June 19, 2016 at 10:28 PM Se percebi este código lê um char tipo "f" e escreve cada um dos bits do caracter num array de char's de tamanho 8, não é?
seuqram Posted June 19, 2016 at 10:54 PM Report #597285 Posted June 19, 2016 at 10:54 PM Em 20/06/2016 às 00:28, Leminski disse: Se percebi este código lê um char tipo "f" e escreve cada um dos bits do caracter num array de char's de tamanho 8, não é? byte[i] = (c >> i) & 1 Não... Imagina que o carater c representa o seguinte conjunto de bits: 00001101 No primeiro ciclo do for loop, o i é 0 (obtendo assim os bits do carater 'c' apartir de i (0) bits que é "00001011) e faz o bit mask (AND) com o 1: ("00000001") e por isso vai retornar 000000001, Ou seja 1. No segundo o i já é 1 e por isso obtêm os carateres apartir de 1 bits ou seja 00000110 e quando faz bit mask com o 00000001 retorna-te 0 (00000000) Após ter saido do loop for de 8 ciclos ficas com um array de numeros 0 e 1 o que não corresponde a um array de carateres '1' e '0' (vê a tabela ASCII) Tens de fazer a conversão á parte...
PsySc0rpi0n Posted June 19, 2016 at 11:13 PM Report #597288 Posted June 19, 2016 at 11:13 PM Em 20/06/2016 às 00:54, seuqram disse: byte[i] = (c >> i) & 1 Não... Imagina que o carater c representa o seguinte conjunto de bits: 00001101 No primeiro ciclo do for loop, o i é 0 (obtendo assim os bits do carater 'c' apartir de i (0) bits que é "00001011) e faz o bit mask (AND) com o 1: ("00000001") e por isso vai retornar 000000001, Ou seja 1. No segundo o i já é 1 e por isso obtêm os carateres apartir de 1 bits ou seja 00000110 e quando faz bit mask com o 00000001 retorna-te 0 (00000000) Após ter saido do loop for de 8 ciclos ficas com um arraz de numeros 0 ou 1 o que não corresponde ao carater '1' ou '0' (vê a tabela ASCII) Podes faz a conversão depois á parte... Não sei se o que está a vermelho é intencional ou seria o byte que está a verde? É importante perceber para não escapar nada. Foi engano ou é intencional? E outra mas esta acho que é óbvia... arraz = array, certo? Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
HappyHippyHippo Posted June 19, 2016 at 11:14 PM Report #597289 Posted June 19, 2016 at 11:14 PM Após ter saido do loop for de 8 ciclos ficas com um arraz de numeros 0 ou 1 o que não corresponde ao carater '1' ou '0' (vê a tabela ASCII) Podes faz a conversão depois á parte... pois ... mas olha bem para a primeira entrada do tópico ... o que ele quer é o inverso IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
seuqram Posted June 19, 2016 at 11:22 PM Report #597291 Posted June 19, 2016 at 11:22 PM (edited) pois ... mas olha bem para a primeira entrada do tópico ... o que ele quer é o inverso O que eu percebi foi: Input de chars: 0 1 0 1 1 1 //Questão: Não sei converter os 8 bits de um char para um array de 8 chars. Output: 00000000 00000001 00000000 00000001 00000001 00000001 Se fosse essa a questão acho, depois de ter o array de ints, convertia para um array de chars e já estava resolvido. Edited June 19, 2016 at 11:25 PM by seuqram
seuqram Posted June 19, 2016 at 11:46 PM Report #597293 Posted June 19, 2016 at 11:46 PM (edited) Não sei se o que está a vermelho é intencional ou seria o byte que está a verde? É importante perceber para não escapar nada. Foi engano ou é intencional? E outra mas esta acho que é óbvia... arraz = array, certo? Não me lembro de ter posto cores... Mas sim, correspondem aos mesmos bytes do carater 'c'. Enganei-me a escrever... Não existe a palavra arraz. Edited June 19, 2016 at 11:52 PM by seuqram
PsySc0rpi0n Posted June 20, 2016 at 07:11 AM Report #597294 Posted June 20, 2016 at 07:11 AM Não me lembro de ter posto cores... Mas sim, correspondem aos mesmos bytes do carater 'c'. Enganei-me a escrever... Não existe a palavra arraz. Eu é que coloquei a vermelho e a verde para evidenciar... Mas ok, esclarecido então! Kurt Cobain - Grunge misses you Nissan GT-R - beast killer
Flinger Posted June 20, 2016 at 08:25 AM Report #597295 Posted June 20, 2016 at 08:25 AM Ele tem um ficheiro texto com a representação ASCII de um binário, isto é, '0' e '1's. Tem de passar isso para binário, e não faço ideia se escrever noutro ficheiro ou não, whatever... Depois de converter para binário o problema está feito. O seuqram usa na resposta dele tudo o que é necessário (operações bitwise) mas a implementação não está correcta. Só precisas de fazer set de um bit por cada char lido.
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