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 3

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


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 8:18
Domenica, 16/06/2019
Guarda che tu hai scritto

Testo quotato

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.



quindi chi non ha capito sei solo tu (anche se io ero stato più diplomatico di te).

Non hai capito che la conversione in binario e la questione del criptare con lo XOR non c'entrano NULLA.

E non hai capito che ti avevo suggerito chiaramente di scrivere un programma che LEGGESSE carattere per carattere da un file, non che ci scrivesse dentro.

E non hai capito che un forum non è una chat e se hai TRE problemi diversi li devi affrontare in TRE discussioni diverse.

Qui DI COSA STIAMO DISCUTENDO?


P.S. Se non vuoi aiuto o non vuoi accettare consigli, dillo subito e amici come prima.



Ultima modifica effettuata da nessuno il 16/06/2019 alle 9:47


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 23:02
Domenica, 16/06/2019
Testo quotato

Postato originariamente da Godrek:
Salve,
volevo fare un piccolo programmino che prende in input un file di testo txt e lo converte in binario.
Dopodiché un altro programmino che prende in input il file txt con il testo in binario e lo converte in testo.
Il tutto è finalizzato a creare una cifratura XOR di un testo txt, però innanzitutto volevo sapere come convertire in C una stringa in binario.
Grazie.


Visto che il topic sta degenerando provo io a spiegare. Una CPU non ha il concetto di "base di un numero" ne il concetto di "carattere" sei tu che associ ad una sequenza di bit un significato. Il dato all'interno della CPU, nello strato fisico è memorizzato in flip-flop (SRAM, registri) o condensatori (DRAM) dove ogni condensatore è un bit e un insieme di 8 forma un byte. Puoi accedere a questi byte tramite nomi in C oppure tramite il loro indirizzo di memoria. La CPU ha una istruzione che fa lo xor di un registro, e in C tale operazione si esegue con l'operatore ^. Così: a ^ b.  Un modo di interpretare quei bit è con ASCII. In C una stringa di caratteri ASCII è un Array di caratteri. Quando tu dici "convertire un numero in binario" stai chiedendo una trasformazione da 1 byte a 8 byte. Questo può essere fatto agevolmente in vari modi, ad esempio una tabella di traduzione pre-confezionata per rendere l'algoritmo O(1). Se poi ciò che intendi con xor non è l'istruzione macchina di xor tra registri/memoria ma uno xor della suddetta rappresentazione te la devi fare:
chat xor(char a, char b) {
If a== '0' && b=='1' return '1';
.......
}
Ci sono 4 casi da contemplare, più un 5° volendo: o a o b non sono né '1' ne '0'.

Ora veniamo alla lettura da tastiera o file: in C (ansi C) non esiste una funzione che ti dice quanti caratteri sono stati letti da tastiera (inteso in modo assoluto).... Dovrai ingegnarsi.
Per quanto riguarda un file invece la faccenda è diversa: puoi usare fseek(file,0,SEEK_END) e poi int l=ftell(file) per sapere quanti caratteri ci sono nel file e poi creare un nuovo Array di caratteri di l+1 caratteri (per lasciare spazio al carattere terminatore, che per inciso è un byte con valore 0) char stringaDaFile = (char*)malloc(sizeof(char)*(l+1));
Poi riposizioni il cursore all'inizio del file con fseek(file, 0, SEEK_SET); e poi, finalmente leggi: int letti= fread(file, ....) E noterai che letti sarà uguale ad l (un buon test da fare). E per avere una stringa maneggiabile come convenzione del c impone ci attacchi il carattere terminatore: stringaDaFile[l]=0;

Una volta lette le stringhe continui a chiamare xor(stringaDaFile, altraStringa) fino alla terminazione di una delle due (basta controllare il carattere ASCII terminatore: lo 0 macchina, non la rappresentazione di 0 in ASCII). Ad ogni chiamata stampi a video il risultato e hai fatto uno xor di stringhe "binarie".

Sono stato chiaro? Dubbi?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 23:08
Domenica, 16/06/2019
Testo quotato

trasformazione da 1 byte a 8 byte.



TheDarkJuster ... a parte la buona volontà mi sa che hai peggiorato la situazione

Lo xor che gli serve è un operatore del C che lavora già come dovrebbe. Basta scrivere

unsigned char r, a, b;

r = a^b;

per fare quello che cerca, assunto il fatto che in a e in b metta i due caratteri da gestire (da stringa o file non importa).



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 23:25
Domenica, 16/06/2019
Testo quotato

Postato originariamente da nessuno:
Testo quotato

trasformazione da 1 byte a 8 byte.



TheDarkJuster ... a parte la buona volontà mi sa che hai peggiorato la situazione

Lo xor che gli serve è un operatore del C che lavora già come dovrebbe. Basta scrivere

unsigned char r, a, b;

r = a^b;

per fare quello che cerca, assunto il fatto che in a e in b metta i due caratteri da gestire (da stringa o file non importa).




Lo so che sono due conversioni sprecate, ma io ho risposto alla sua domanda, secondo ciò che ho cercato al meglio di capire.

PM Quote
Avatar
Godrek (Normal User)
Pro


Messaggi: 76
Iscritto: 04/08/2015

Segnala al moderatore
Postato alle 4:32
Lunedì, 17/06/2019
TheDarkJuster, si può mettere il mi piace al tuo commento? :)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 6:47
Lunedì, 17/06/2019
Mi dispiace deludervi ma il commento non c'entrava molto (ma cosa c'entrano i registri della cpu?) e il like ad un commento fuori luogo e' anch'esso fuori luogo (conferma che non si e' capito ...).

Se vogliamo parlare di programmazione c seria bene, se volete concludere un thread sconclusionato fate pure.

Parli di conversioni sprecate e dici di aver risposto correttamente?
E di quale 5 caso parli per la xor? Tu sai Godrek di quale 5 caso parla dato che dai un like?
Il problema e' solo che bisognerebbe STUDIARE le basi prima di voler scrivere codice, tutto qui. A questo bisognerebbe dare un like.


Ultima modifica effettuata da nessuno il 17/06/2019 alle 7:19


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 14:34
Lunedì, 17/06/2019
Testo quotato

Postato originariamente da nessuno:
Mi dispiace deludervi ma il commento non c'entrava molto (ma cosa c'entrano i registri della cpu?) e il like ad un commento fuori luogo e' anch'esso fuori luogo (conferma che non si e' capito ...).

Se vogliamo parlare di programmazione c seria bene, se volete concludere un thread sconclusionato fate pure.

Parli di conversioni sprecate e dici di aver risposto correttamente?
E di quale 5 caso parli per la xor? Tu sai Godrek di quale 5 caso parla dato che dai un like?
Il problema e' solo che bisognerebbe STUDIARE le basi prima di voler scrivere codice, tutto qui. A questo bisognerebbe dare un like.




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.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:50
Lunedì, 17/06/2019
Il fatto è che lui scrive

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.

in cui quando più volte parla di

binario

(converte file di testo e chiave in binario ... cripta il binario del file mediante il binario della chiave ...)

in realtà - per sue carenze - esattamente non sa cosa dice e il binario non c'entra nulla.

Quello che vuole fare è evidentemente

In definitiva, volevo fare un programma C che prende in input un file di testo e una chiave e cripta il file mediante la chiave con lo XOR.

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


P.S. Sul 5° caso della Xor non mi hai risposto ma va beh ...

Ultima modifica effettuata da nessuno il 17/06/2019 alle 14:53


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
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo