2009-09-16 13 views
10

Molte lingue hanno funzioni che elaborano solo "plaintext", non binary. Questo significa che saranno ammessi solo i caratteri nell'intervallo ASCII?Qual è la differenza tra dati in chiaro e binari?

binario è solo una serie di byte, non è simile al testo in chiaro che è solo una serie di byte interpretati come caratteri? Quindi, il testo in chiaro può memorizzare gli stessi formati/protocolli di dati come binari?

+4

FYI, non c'è niente di simile al testo semplice. http://www.joelonsoftware.com/articles/Unicode.html – harpo

+0

FYI, il testo in chiaro in questo contesto non è UTF-8 e non può rappresentare Unicode, perché come ho detto prima, è una serie di byte, niente di più divertente. –

+0

Suppongo di essere stato un po 'sgraziato. Dopo tutto, hai incluso le virgolette sull'aria in "testo semplice". – harpo

risposta

3

One cosa spesso significa che la lingua potrebbe sentirsi libera di interpretare caratteri di controllo certian, come i valori 10 o 13, come terminatori di riga logica. In altre parole, un'operazione di output potrebbe aggiungere automagicamente questi caratteri alla fine e un'operazione di input potrebbe toglierli dall'input (e/o terminare la lettura lì).

Al contrario, le operazioni di I/O di lingua che pubblicizzano il lavoro sui dati "binari" di solito includono un parametro di input per la lunghezza dei dati su cui operare, poiché non esiste altro modo (a meno di leggere la fine del file) per sapere quando è fatto.

+0

Supponiamo che la funzione a cui sto fornendo testo in chiaro, la prenda come una stringa. Non è possibile misurare la lunghezza prima della trasmissione, invece di affidarsi a caratteri di controllo? –

+2

Dipende dalla lingua. Ada, in modo certosino. In C, l'unico modo per farlo è cercare un terminatore di riga (ASCII 0). Ciò significa che non è possibile produrre quel valore in un file usando le routine di I/O "ASCII", ma è possibile utilizzare le routine "binarie" basate sulla lunghezza. –

+0

Certo, e potrebbe aggiungere un carattere di controllo (come \ r \ n), o anche fare conversioni di set di caratteri a quella stringa, se i dati sono trattati come binari, nulla sarebbe aggiunto o modificato. – nos

6

un solo testo è leggibile, un file binario di solito è illeggibile da un essere umano, dal momento che è composto da caratteri stampabili e non stampabili.

tenta di aprire un file JPEG con un editor di testo (per esempio notepad o vim) e capirete cosa intendo.

Un file binario è di solito costruiti in modo da ottimizzare la velocità, dal momento che non è necessaria alcuna analisi. Un file di testo semplice è modificabile a mano, un file binario no.

+10

Jon Skeet può leggere file binari. –

+0

Spero che questa sia l'alba degli scherzi di Jon Skeet in stile Chuck Norris. – JMP

+0

Chuck Norris può leggere i file binari direttamente dal piatto. – fbrereto

4

"Testo normale" può avere diversi significati.

Quello più utile in questo contesto è che si tratta semplicemente di file binari organizzati in sequenze di byte che un particolare sistema di computer può tradurre in un insieme finito di quelli che considera caratteri "di testo".

Un secondo significato, in qualche modo collegato, è una restrizione che detto sistema dovrebbe visualizzare questi "caratteri di testo" come simboli leggibili da un essere umano come membri di un alfabeto riconoscibile. Spesso, l'implicazione non scritta è che il meccanismo di traduzione è ASCII.

Una terza, ancora più restrittive significato, è che questo sistema deve essere un "semplice" editor di testo/spettatore. Di solito implica la codifica ASCII. Ma, in realtà, c'è una piccola differenza tra te, l'umano, testo di lettura codificato in un certo formato funky e visualizzato da un programma proprietario, contro l'editor di testo VI che legge il file codificato ASCII.

Nel contesto di programmazione, il vostro ambiente di programmazione (comprized da OS + sistema API + tue capacità linguistiche) definisce sia un insieme di caratteri di "testo", e una serie di codifiche è in grado di leggere per la conversione a questi " testo "caratteri. Si noti che questo potrebbe non implicare necessariamente ASCII, inglese o 8 bit - come esempio, Perl può leggere e utilizzare nativamente il set completo di caratteri "Unicode".

Per rispondere alla tua domanda specifica, si può sicuramente utilizzare stringhe "carattere" per la trasmissione di sequenze di byte arbitrarie, con l'avvertenza che devono applicare le convenzioni di terminazione stringa. Il problema è che le funzioni già esistenti per "elaborare i dati dei caratteri" probabilmente non dispongono di alcuna funzionalità utile per gestire i dati binari.

3

Generalmente, dipende dalla lingua/ambiente/funzionalità.

I dati binari sono sempre questo: binario. È trasferito senza modifiche.

modalità "Testo normale" può significare una o più delle seguenti operazioni:

  • il flusso di byte è diviso in linee. I delimitatori di riga sono \ r, \ n o \ r \ n o \ n \ r. A volte dipende dal sistema operativo (come * nix mi piace \ n, mentre Windows mi piace \ r \ n). La fine della riga può essere regolata per l'applicazione di lettura
  • codifica dei caratteri può essere regolata.L'ambiente potrebbe rilevare e/o convertire la codifica di origine nel codifica l'applicazione prevede
  • probabilmente alcune altre conversioni devono essere aggiunti a questo elenco, ma non riesco a pensare di qualsiasi altro in questo momento
2

Tecnicamente nulla. Il testo normale è una forma di dati binari. Tuttavia, una grande differenza è come vengono memorizzati i valori. Pensa a come potrebbe essere memorizzato un numero intero. Nei dati binari userebbe un formato a complemento a due, probabilmente prendendo 32 bit di spazio. In formato testo un numero verrebbe invece memorizzato come una serie di cifre Unicode. Quindi il numero 50 verrebbe memorizzato come 0x32 (riempito per prendere 32 bit) in binario, ma sarebbe memorizzato come '5' '0' in testo semplice.

Problemi correlati