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 4

Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 15:08
Lunedì, 17/06/2019
Il 5° caso, se ho ben capito, è ovvio: siccome non sta parlando di bit, ma di una stringa di char che rappresentano caratteri/cifre secondo una base binaria, può capitare che nella stringa ci siano caratteri che non sono né '0' né '1', e quindi non validi nel contesto della rappresentazione di un numero a base binaria. Insomma, se si verifica il 5° caso significa che è stata presa in considerazione una stringa non valida.


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:12
Lunedì, 17/06/2019
@Aldo ... a parte che quello NON è un caso della Xor ma, semmai, una questione di validazione dell'input degli argomenti, anche se fosse, ci sarebbe

un caso in cui non è valido l'operando a
un caso in cui non è valido l'operando b
un caso in cui non sono validi gli operandi a e b

quindi i casi sarebbero 7.

Ma siamo comunque nella fantainformatica perché si parla della tavola della verità della funzione logica Xor non degli argomenti di una funzione che emula la Xor.

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


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
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:16
Lunedì, 17/06/2019
In ogni caso mi sembra che il thread si sia "allungato" senza ancora vedere un briciolo di codice.

Tagliamo la testa al toro e attendiamo il codice di Godrek ... o no?

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


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
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 19:33
Lunedì, 17/06/2019
Mi riferivo esattamente al caso "non ho validato l'input perché non mi pareva opportuno e almeno con un assert mi accorgo".
Il briciolo di codice l'ho messo io, ma ora voglio vedere quello dell'utente, ovviamente!

PM Quote
Avatar
Godrek (Normal User)
Pro


Messaggi: 76
Iscritto: 04/08/2015

Segnala al moderatore
Postato alle 23:34
Lunedì, 17/06/2019
c

Ultima modifica effettuata da Godrek il 17/06/2019 alle 23:37
PM Quote
Avatar
Godrek (Normal User)
Pro


Messaggi: 76
Iscritto: 04/08/2015

Segnala al moderatore
Postato alle 23:37
Lunedì, 17/06/2019
Testo quotato


Tagliamo la testa al toro e attendiamo il codice di Godrek ... o no?



Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4.  
  5. int main()
  6. {
  7.   char file_path[260];
  8.   FILE *file_pointer1;
  9.   FILE *file_pointer2;
  10.   int read_character;
  11.   int new_character;
  12.   const char key = '$';
  13.  
  14.   printf("Inserire il pathname del file di testo che si vuole criptare: \n");
  15.   scanf("%s", file_path);
  16.  
  17.   file_pointer1 = fopen(file_path, "r");
  18.   if (file_pointer1 == NULL)
  19.   {
  20.     perror("Errore nell'apertura del file");
  21.     exit(1);
  22.   }
  23.  
  24.   file_pointer2 = fopen("new_text.txt", "w+");
  25.   if (file_pointer2 == NULL)
  26.   {
  27.     perror("Si è verificato un errore");
  28.     exit(1);
  29.   }
  30.  
  31.   while( (read_character = fgetc(file_pointer1)) != EOF)
  32.   {
  33.     new_character = read_character ^ key;
  34.  
  35.     if (isprint(read_character) && isprint(new_character))
  36.       fputc(new_character, file_pointer2);
  37.     else
  38.       fputc(read_character, file_pointer2);
  39.   }
  40.  
  41.   fclose(file_pointer1);
  42.   fclose(file_pointer2);
  43.  
  44.   return 0;
  45. }



Questo è quello che ho fatto fin ora, senza fare conversioni.
Mi sapreste dire come mai i numeri e simboli come ad esempio '+' non vengono criptati? Colpa dell'isprint?

Comunque, il sistema crittografico che volevo sviluppare io (non sapevo come si chiamasse) è il ONE TIME PAD, (che non è quello implementato in questo programma) dove si prende il messaggio, lo si converte in binario, si prende la lunghezza in bit di tale messaggio, si genera una chiave in binario di lunghezza pari e si fa lo xor tra i bit della chiave e del messaggio.



Testo quotato

Lui vuole fare lo xor di due stringhe nel rappresentazione che più gli piace. Poteva fare lo xor prima e convertire il risultato? Si. Può fare come ho scritto io (che a quanto pare è ciò che vuole)? Si. Quindi? La mia risposta, se pur non ottimale sotto il profilo di tempi di esecuzione, risultato ottimo con minor tempo di esecuzione e tutte queste cose, è corretta. Fa ciò che deve e vuole l'utente.

Dov'è il problema? Non c'è. Vuole fare qualche programma tanto per provare? Lo faccia che male non gli fa. Lo sproloquio sulla rappresentazione dio caratteri era necessario per assicurarmi che si convincesse che il PC non ha una nozione di "base numerica", "caratteri" o altre rappresentazioni e che tutto ciò è solo nelle nostre teste.



TheDarkJuster, penso di amarti :)
Date una medaglia a quest'uomo!

Nessuno, posso fare un programma che prima stampa a video la parola "mucca", poi una bestemmia, poi offende pesantemente l'utente e poi, in preda ai sensi di colpa, per farsi perdonare gli chiede quale testo vuole criptare? Oppure è un problema?
Nel topic io non ho chiesto cosa ne pensate della mia idea (che comunque era per scrivere un programma a scopo  esercitativo) ma come avrei potuto svilupparla (a prescindere da quanto bella o brutta potesse sembrarvi).
I commenti personali sono ben accetti ma almeno solo dopo aver dato, o provato a dare, l'aiuto richiesto.


Testo quotato


l problema e' solo che bisognerebbe STUDIARE le basi prima di voler scrivere codice, tutto qui. A questo bisognerebbe dare un like.



Nessuno, un like anche per te :) (a prescindere dal contenuto del messaggio)

Testo quotato


( che poi era un discorso che aveva iniziato molto tempo fa nel suo thread http://www.pierotofy.it/pages/extras/forum/2/1061691-crypt ... )



Il problema si risolverebbe se anziché esprimere le proprie opinioni sul perché l'utente deve fare quello che ha scritto di voler fare sul topic, si rispondesse (sempre se possibile) alle sue domande.
Evidentemente, per riaprire nuovamente il topic c'erano ancora dei dubbi irrisolti.

Infine, da notare che il titolo di questo topic è: Conversioni stringa in binario.
Finora (DOPO 30 RISPOSTE) non ho visto neanche una risposta su come fare sta benedetta (e se volete inutile) conversione
(al massimo, c'è solo scritto: perché dovresti farla? non la fare! :) ) ma comunque mi sono documentato altrove.

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.   unsigned char carattere_inserito;
  6.   int quoziente;
  7.   int index;
  8.   int resto[8];
  9.  
  10.   printf("Inserisci una carattere: \n");
  11.   scanf("%c", &carattere_inserito);
  12.  
  13.   quoziente = carattere_inserito;
  14.  
  15.   printf("La conversione in decimale della lettera %c è: %d\n", carattere_inserito, quoziente);
  16.  
  17.   for(index=7; index>=0; index--)
  18.   {
  19.     resto[index] = quoziente%2;
  20.     quoziente = quoziente/2;
  21.   }
  22.  
  23.   printf("La conversione in binario della lettera %c è: ", carattere_inserito);
  24.  
  25.   for(index=0;index<=7;index++)
  26.     {
  27.       printf("%d", resto[index]);
  28.     }
  29.  
  30.   printf("\n");
  31.  
  32.   return 0;
  33. }


Ultima modifica effettuata da Godrek il 18/06/2019 alle 0:29
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 7:57
Martedì, 18/06/2019
Per ritornare IT i discorsi sulle "mucche" li ignorero' e mi concentrero' sul codice, sul primo in particolare perche' l'altro lo avevi gia'  proposto.

Come vedi hai scritto un codice che legge e cripta con lo xor SENZA convertire nulla in binario (come ti ho detto sin dall'inizio), ne' il carattere ne' la chiave. Finalmente ci capiamo.

Il problema che riscontri e' ovvio se calcoli lo xor tra il codice ascii del + e della chiave $. Ovvero

43 xor 36

che fa 15 ovvero un carattere di controllo non stampabile (e dato che hai messo il controllo della isprint)...

In realta'  ti devi attendere caratteri non stampabili quindi non devi cercare di vedere la stringa criptata in ASCII perche' vedrai caratteri strani e mancanti.

Apri il file in binario e memorizza il risultato di ogni xor senza usare la isprint per il carattere criptato.

Ultima modifica effettuata da nessuno il 18/06/2019 alle 9:41


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
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 13:33
Martedì, 18/06/2019
Testo quotato

Postato originariamente da nessuno:
Per ritornare IT i discorsi sulle &quot;mucche&quot; li ignorero' e mi concentrero' sul codice, sul primo in particolare perche' l'altro lo avevi gia'  proposto.

Come vedi hai scritto un codice che legge e cripta con lo xor SENZA convertire nulla in binario (come ti ho detto sin dall'inizio), ne' il carattere ne' la chiave. Finalmente ci capiamo.

Il problema che riscontri e' ovvio se calcoli lo xor tra il codice ascii del + e della chiave $. Ovvero

43 xor 36

che fa 15 ovvero un carattere di controllo non stampabile (e dato che hai messo il controllo della isprint)...

In realta'  ti devi attendere caratteri non stampabili quindi non devi cercare di vedere la stringa criptata in ASCII perche' vedrai caratteri strani e mancanti.

Apri il file in binario e memorizza il risultato di ogni xor senza usare la isprint per il carattere criptato.


Già, alla fine la conversione era completamente inutile prima della cifrazione (lo immaginavo) ma almeno spero che sia servito lo sproloquio sulla rappresentazione dei caratteri. Inoltre tieni conto che una xor di una lettera per se stessa da 0 (il carattere terminatore) quindi dovrai stampare carattere per carattere (magari in rappresenzatione esadecimale). Questo perché altrimenti troncheresti la stringa risultante prima del tempo oppure scriveresti caratteri di controllo che potrebbero cancellare il carattere precedente oppure far riprodurre suoni al PC (vedi ad esempio '/b' o '/a', non ricordo). Comunque lieto di aver aiutato.

PM Quote
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo