Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Conversioni stringa in binario
Forum - C/C++ - Conversioni stringa in binario - Pagina 2

Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 7:08
Sabato, 15/06/2019
Guarda che nella scanf la %s non si usa per i singoli caratteri ma per gli array di char.

Se sai cosa è un array di char risolverai facilmente altrimenti ti consiglio di studiare questo argomento basilare da un libro. Una volta fatto l'input prenderai ogni carattere con un ciclo e lo passerai al tuo codice


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Godrek (Normal User)
Pro


Messaggi: 76
Iscritto: 04/08/2015

Segnala al moderatore
Postato alle 14:45
Sabato, 15/06/2019
E supponendo di non sapere di che lunghezza sia l'input (e non volendo dare un limite massimo di caratteri inseriti) come inizializzo l'array di char?

ovvero:

char testo_inserito[??]

Risolverei usando la malloc?

Ultima modifica effettuata da Godrek il 15/06/2019 alle 14:57
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:28
Sabato, 15/06/2019
Puoi usare un oggetto di classe string ma solo in C++.

In C con la malloc sarebbe molto complesso ma non capisco il problema. Se prevedi una stringa di 1000 caratteri non capisco come fai ad utilizzarli tutti da tastiera.

O parli di dati provenienti da un file? In quel caso puoi leggere carattere dopo carattere.

Ultima modifica effettuata da nessuno il 15/06/2019 alle 15:30


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Godrek (Normal User)
Pro


Messaggi: 76
Iscritto: 04/08/2015

Segnala al moderatore
Postato alle 16:55
Sabato, 15/06/2019
Perché vorrei semplicemente allocare tramite la malloc, in C, il solo spazio necessario per contenere la stringa ne più ne meno.
Come potrei utilizzarla?

Per quanto riguarda la lettura da file, dovrei prima leggere il numero di caratteri dentro il file e poi creare l'array con quel numero, giusto?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:13
Sabato, 15/06/2019
Non puoi usare la malloc in maniera semplice. Dovresti scrivere del codice complesso ma non ne vale la pena!
Per fare esperienza, te l'ho già detto, ti basta prevedere un input da 1000 caratteri che non utilizzerai sicuramente completamente.

Per il file dipende da cosa devi fare. Se devi leggerlo tutto in memoria basta ottenere la lunghezza del file e usare la malloc. Ma il file potrebbe essere molto grande. Ripeto DIPENDE da cosa ci devi fare, magari non ha senso leggerlo tutto in memoria in una sola volta.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Godrek (Normal User)
Pro


Messaggi: 76
Iscritto: 04/08/2015

Segnala al moderatore
Postato alle 20:05
Sabato, 15/06/2019
In definitiva, volevo fare un programma C che prende in input un file di testo e una chiave, li converte entrambe in binario e poi cripta il binario del file mediante il binario della chiave con lo XOR.

Poi un'altro programma che prende in input la chiave e il testo criptato, converte la chiave in binario e poi  decripta il file di testo criptato sempre usando lo XOR.
Quindi non sapendo a priori quanto grande possa essere il file di testo, magari anche più di 1000 caratteri, volevo sapere come gestire un eventuale situazione.

Per quanto riguarda invece l'uso della malloc, mi sarebbe piaciuto anche fare un programma per prendere una stringa in ingresso e convertirla in binario e, anche se molto probabilmente 1000 caratteri non verranno mai usati, mi interessava sapere almeno la logica di come gestire un eventuale stringa in ingresso superiore ai 1000 caratteri.

Ultima modifica effettuata da Godrek il 15/06/2019 alle 20:44
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:44
Sabato, 15/06/2019
Allora non ci siamo capiti.

Come ti ho detto all'inizio, NON DEVI FARE NESSUNA CONVERSIONE per lavorare sui caratteri di un file.
La strasformazione in binario non ha alcun senso (evidentemente sono concetti poco chiari per te).

Poi ripeto, un file lo puoi leggere "carattere per carattere" qualsiasi lunghezza abbia, quindi non esiste neanche questo problema.

Ti ripeto che l'input da tastiera di 1000 (o 10 mila) caratteri non ha alcun senso.
Ma se vuoi proprio, la logica sarebbe quella di ottenere un carattere alla volta (con una funzione come la getchar) e aggiungerlo ad un buffer di memoria allocato con la malloc.
Inizialmente allochi un buffer (ad esempio) di 100 caratteri e quando superi i 100 caratteri ne allochi altri 100 e così via.
Ovviamente dovrai gestire l'input di ogni singolo tasto, compresi quello di cancellazione, e tenere sotto controllo la lunghezza attuale della stringa.
Alla fine dell'input (ricevuto un return) dovrai riallocare il buffer con la lunghezza finale.
Ovviamente tutto all'interno di un ciclo. Puoi provarci ma è inutile e forse complesso per le tue conoscenze.

Ti consigliodi cominciare a scrivere un programma che

1) apre un file in lettura
2) legge carattere per carattere e li visualizza
3) chiude il file


P.S. Ma non avevi seguito Informatica I ??? Queste sono cose che si fanno ...

P.P.S. Ne avevi già iniziato a parlare in

http://www.pierotofy.it/pages/extras/forum/2/1061691-crypt ...

ovvero nel 2017 !!

Ultima modifica effettuata da nessuno il 15/06/2019 alle 21:57


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Godrek (Normal User)
Pro


Messaggi: 76
Iscritto: 04/08/2015

Segnala al moderatore
Postato alle 0:33
Domenica, 16/06/2019
Testo quotato

Postato originariamente da nessuno:
Come ti ho detto all'inizio, NON DEVI FARE NESSUNA CONVERSIONE per lavorare sui caratteri di un file.
La strasformazione in binario non ha alcun senso (evidentemente sono concetti poco chiari per te).



No, mi sa che sei tu che non hai capito!

PROGRAMMA N.1:
Programma che prende in input un singolo carattere ASCII (DA TASTIERA E NON DA FILE) e restituisca in output la corrispondente rappresentazione binaria. Perché in binario? VOGLIO CHE IL MIO PROGRAMMA FACCIA QUESTO!

PROGRAMMA N.2:
Programma che prende in ingresso del testo ASCII (sempre da INPUT E NON DA FILE) (e non un singolo carattere ma questa volta anche un poema), lo converte in binario e lo stampa a video.
Non sapendo a priori quanto sarà lungo questo "poema" in ingresso (magari la divina commedia che penso avrà più di 1000 caratteri), volevo sapere in che modo potevo memorizzarlo in un array di char che abbia la dimensione esatta per contenerlo (ne più ne meno).

PROGRAMMA N.3:
Programma che acquisisce da un file il numero di caratteri, crea array con dimensione il numeri di quei caratteri, memorizza il testo del file nell'array, lo converte in binario e lo scriva su un nuovo file.


Testo quotato

Postato originariamente da nessuno:

Ti consigliodi cominciare a scrivere un programma che

1) apre un file in lettura
2) legge carattere per carattere e li visualizza
3) chiude il file

P.S. Ma non avevi seguito Informatica I ??? Queste sono cose che si fanno ...



Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.   FILE *file_pointer;
  7.   char nome[20];
  8.   char cognome[20];
  9.   int esito;
  10.  
  11.   file_pointer = fopen("./mytext.txt", "w+");
  12.  
  13.   if (file_pointer == NULL)
  14.   {
  15.     printf("Errore nell'apertura del file!\n");
  16.     exit(1);
  17.   }
  18.   else
  19.     printf("File aperto correttamente!\n");
  20.  
  21.   printf("Inserisci nome: \n");
  22.   scanf("%s", nome);
  23.   printf("Inserisci cognome: \n");
  24.   scanf("%s", cognome);
  25.  
  26.   esito = fprintf(file_pointer, "Nome: %s\nCognome: %s\n", nome, cognome);
  27.  
  28.   if (esito == EOF)
  29.   {
  30.     printf("Errore nella scrittura del file!\n");
  31.     exit(1);
  32.   }
  33.   else
  34.     printf("Sono stati scritti correttamente %d caratteri sul file!\n", esito);
  35.  
  36.   system("./mytext.txt");
  37.  
  38.   esito = fclose(file_pointer);
  39.  
  40.   if (esito == EOF)
  41.   {
  42.     printf("Errore nella chiusura del file!\n");
  43.     exit(1);
  44.   }
  45.   else
  46.     if (esito == 0)
  47.       printf("File chiuso correttamente!\n");
  48.  
  49.   return 0;
  50. }



Ora posso andare avanti? :)

Ultima modifica effettuata da Godrek il 16/06/2019 alle 0:56
PM Quote
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo