La memorizzazione di dati di testo in chiaro occupa meno spazio rispetto all'archiviazione del messaggio equivalente in binario?

31

Come sviluppatore web ho pochissima conoscenza dei dati binari.

Se prendo la frase "Ciao mondo.", convertila in binario e la memorizzi come binario in un database SQL, sembra come gli 1 e gli 0 occuperebbero più spazio di lettere. Mi sembra che usare le lettere sia come usare la compressione, dove un simbolo rappresenta più.

Ma è davvero così che funziona?

La memorizzazione di dati di testo in chiaro occupa meno spazio rispetto all'archiviazione del messaggio equivalente in binario?

    
posta john doe 26.05.2017 - 17:59
fonte

3 risposte

133

Il testo normale è binario.

Quando scrivi H su un disco rigido, la testina di scrittura non incide due linee verticali e una linea orizzontale nel piatto, codifica magneticamente i bit 01001000 1 in il piatto.

Da lì, dovrebbe essere ovvio che la memorizzazione di dati di testo in chiaro occupa esattamente la stessa quantità di spazio di archiviazione dei dati binari.

Ma il testo in chiaro è solo un 2 formato binario particolare

Il testo normale può essere trasformato in modo reversibile in altri formati binari. Una trasformazione comune è la compressione che di solito produce una rappresentazione più compatta, ovvero meno bit utilizzati per rappresentare le stesse informazioni.

A seconda di cosa stai usando il testo in chiaro da rappresentare, potresti essere in grado di utilizzare diversi formati binari per rappresentare le stesse informazioni. Questo può usare più spazio, potrebbe usare meno.

Ad esempio, i numeri 5 e 1234567 potrebbero essere rappresentati in testo semplice utilizzando caratteri numerici, risultando in queste sequenze di bit su disco 3 :

00110101 00000000
00110001 00110010 00110011 00110100 00110101 00110110 00110111 00000000

In alternativa, puoi utilizzare il complemento a due a 32 bit

a 32 bit:

00000000 00000000 00000000 00000101
00000000 00010010 11010110 10000111

Che è una rappresentazione meno compatta di 5 , ma una rappresentazione più compatta di 1234567 .

E c'è un numero letteralmente infinito di altre rappresentazioni che avrebbero vari livelli di compattezza e flessibilità, anche se, in pratica, molto meno di quello che molte rappresentazioni sono effettivamente utilizzate.

1 Supponendo UTF-8. L'esatta sequenza di bit per un personaggio dipende dalla specifica codifica che stai utilizzando.

2 O in realtà, diversi formati, viste le varie codifiche .

3 Se ti stai chiedendo cosa siano quegli otto zeri alle estremità, beh, hai bisogno di sapere come sono i dati. Le opzioni fondamentalmente si riducono a un marker (l'ho usato, tramite un byte null), lo spazio dedicato alla memorizzazione della lunghezza (Pascal utilizzava un byte per memorizzare la lunghezza di una stringa) o una dimensione fissa (utilizzata nel complemento a due successivo esempio).

    
risposta data 26.05.2017 - 19:04
fonte
15

Trovo che questa sia una cosa divertente a cui pensare. Il binario non è 1 e 0 nel modo in cui ne parli.

Immagina che ci sia una quantità, posso dirti quale quantità è in molti modi diversi:

  • Nine in inglese
  • Neuf in francese
  • 9 in numeri arabi
  • IX in numeri romani
  • 1001 in binario con numeri arabi
  • on off off on in binario con on / off
  • high low low high in binario rappresentato con tensioni o leve o livelli dell'acqua o carica elettrica ... o parole inglesi "alto" e "basso"

Rappresentano tutti la stessa cosa. Il punto qui è che il binario non è 1s e 0s, questo è solo un modo per rappresentare un valore.

Quando parli di convertire una H in binario, probabilmente immagini di vedere 10101010 sullo schermo, ma non è "binario", cioè una cifra per ogni bit binario.

Sì, se hai convertito H in "binario" mentre le persone normalmente ne parlano, e poi lo hanno rappresentato in cifre arabe e poi memorizzato, ci sarebbe voluto più spazio nello stesso modo in cui si convertiva H in aitch occupa più spazio.

Ma puoi vedere che il binario è un modo per rappresentare una quantità, bene con quella logica che dice "se ho convertito H in binario e lo ho rappresentato come high low high low high low high low allora ci vorrebbero 35 caratteri!" Questo è ancora più di 10101010 ! Ma questi due sono entrambi "binari" ... quindi come è uno più grande dell'altro?

L'altro lato di questo è di chiedersi come H è memorizzato da un computer, e di vedere che H è di per sé solo un modo di rappresentare una quantità - la stessa quantità 72 , 01001000 , o seventy two o codice carattere ASCII H . Qual è la risposta di 8bittree che il testo semplice è binario, ma questo sono io che sto cercando di mostrare cosa significa .

Quindi ottieni un pattern di bit in un computer 01001000 e cosa significa? Qualsiasi cosa - si potrebbe parlare di un numero, come parte di un file zip, come un personaggio, dipende da quale fosse l'intento della persona che lo ha creato. Se sai che si suppone che sia un testo semplice, viene da un codificatore di caratteri H - > 01001000 e si guarda nell'altro senso nella tabella di codifica dei caratteri - ASCII, UTF-8, maiuscole-jis, ecc. e si trova il carattere giusto e fuori viene un H o qualsiasi altra cosa. O esce il personaggio sbagliato se usi una diversa codifica rispetto a chi la ha creata. Questo è il link di @Eric Lippert.

Ma mentre scrivo questo, e mentre ci pensi, H è un byte e 01001000 è 8 byte, sì è più spazio. E sì è (una rappresentazione di) binario. Ma si tratta di un livello di astrazione più elevato di quello utilizzato dal computer: binario visualizzato in caratteri ASCII, in cui ogni personaggio è rappresentato dietro le quinte con un modello di bit binario, ciascuno grande come H .

    
risposta data 27.05.2017 - 04:25
fonte
12

Does storing plain text data take up less space than storing the equivalent message in binary?

No, mai.

Il tuo computer memorizza già i dati in testo normale nella rappresentazione binaria equivalente. Memorizzare qualcosa come testo normale o binario segnala semplicemente come il computer dovrebbe interpretare quel flusso binario identico .

It seems to me like using letters would sort of be like using compression, where one symbol stands for multiple.

È abbastanza vero. Un personaggio rappresenterà più di un bit. Il problema è che sono cose di dimensioni diverse. Serve solo un bit per memorizzare un 1 o uno 0, ma 8 bit (o più) per memorizzare un carattere di testo normale. Non ottieni nulla usando i personaggi.

Se qualcosa , puoi comprimere le cose dall'altra parte. Dopo tutto, 8 bit sono 256 diversi valori possibili, tuttavia il testo normale di solito è limitato a lettere, numeri e alcuni caratteri di punteggiatura. Non ha bisogno di tanti bit quanti ce ne vogliono.

    
risposta data 26.05.2017 - 19:03
fonte

Leggi altre domande sui tag