Domanda

Ho una tecnica di compressione ibrida che voglio implementare, la mia implementazione è (finora): posso codificare una stringa in una stringa compressa codificata.Queste sono stringhe binarie.Ad esempio,

Leggi i testi da un file di testo ->

Quindi convertirlo in una stringa binaria ->

Quindi convertirlo in una stringa binaria codificata.

A questo punto, posso salvare la stringa binaria codificata in un file di testo, ma voglio sapere cosa è fatto in generale.

Ad esempio, quando usiamo WinRAR software, IT -

    .
  1. non legge come ho detto sopra, comprime qualsiasi file
  2. rende il file .rar come output
  3. Allora, come un compressore "Leggi" qualsiasi file come forma binaria pura e come rende il file di output?

    In un altro modo, quello che voglio è sapere come leggere qualsiasi file come forma binaria pura e fare un file di output dato che ho uno schema di codifica e decodifica. Si prega di commentare qualsiasi cosa relativa alla domanda, sono nuovo all'argomento.

È stato utile?

Soluzione

Un file è un flusso di byte

Sebbene il sistema operativo fornisca alcune campane e fischietti (come metadati o forks ), la maggior parte definisce un file come una sequenza di 0 o più Bytes .

Ogni byte nel file è un valore numerico da 0 a 255 (incluso). Non c'è niente di più ad esso.

Un formato di file è un modo per dare il significato ai byte in un file

Per un semplice esempio, potresti avere un file che rappresenta un'immagine in bianco e nero, in cui ogni byte è o 0 (pixel nero) o 1 (pixel bianco), una riga dopo un'altra. Forse i primi due byte codificano la larghezza dell'immagine come un numero a 16 bit e il secondo due byte codificano l'altezza come un numero a 16 bit.

Questo esempio è molto inefficiente, dal momento che ogni byte dei pixel non può mai utilizzare i possibili valori 2-255. Potresti voler leggere su Teoria delle informazioni.

"file di testo" è un formato di file

In un file di testo, ogni valore possibile 0-255 viene assegnato un significato, una lettera specifica, un numero, un simbolo o un carattere "effetto speciale" come la nuova riga. Una specie di. Parlando rigorosamente, in ASCII Codifica, valori solo 0-127 hanno un significato. Ci sono molte diverse codifiche di testo, anche se solo poche quelle comuni. In Unicode , i caratteri non sono sempre 1 byte di lunghezza.

Ma andiamo con ASCII. Se si memorizza "51A3" come testo, i valori di byte 53, 49, 97, 51 entreranno nel file, in quanto corrispondono a "5", "1", ecc.

Se si memorizza il valore esadecimale 0x51 e 0xa3 come bytes , quindi ci saranno semplicemente quei due byte (81, 163 in decimale). Quindi questa è metà del numero di byte. Tuttavia il file non è più un file di testo perché 163 non è definito in ASCII.

Altri formati di file richiedono software appositamente costruito

I file di testo sono popolari perché puoi aprirli in qualsiasi editor (Blocco note, nano). Come capisci, non sono molto efficienti dallo spazio.

Ma non è difficile scrivere il tuo software. Ecco un esempio.

#!/usr/bin/env python3

# PART 1 - WRITE BYTES TO A FILE

save_hex = "60b725f10c9c85c70d97880dfe8191b3"

print("Saving:", save_hex)

# group save_hex into groups of 2
save_ints = []
i = 0
while i < len(save_hex):
    # the 16 makes int() treat the value as hex
    integer = int(save_hex[i:i+2], 16)
    save_ints.append(integer)
    i+=2

print("Integer values:", save_ints)

# create a bytes object out of an array of numbers
save_raw = bytes(save_ints)

with open('myfile.raw', 'wb') as f:
    f.write(save_raw)



# PART 2 - READ BYTES FROM A FILE

with open('myfile.raw', 'rb') as f:
    contents = f.read()

print("Loaded: ", end='')
for byte in contents:
    print('{:02x}'.format(byte), end='')
print()
.

Dopo aver eseguito il controllo della lunghezza del file è metà della lunghezza della stringa esagonale. Inoltre, impara a utilizzare uno strumento Hexdump per ispezionare il contenuto del file.

Python's Oggetti Bytes hanno un sacco di funzioni ma se usi l'idea di base sopra (Elenco degli intervalli nell'intervallo 0-255 -> Oggetto Bytes) e (ITORERE OVERE OGGETTO BYTE E OTTIENI INT IN RANGE 0-255) Quindi non è necessario dormire troppo nei dettagli.

Il software di compressione di tutti gli usi di solito non comprende i file che comprime

Quando si inserisce un file MP3 in uno zip o un raro, il software di compressione lo tratta come una sequenza di byte, nello stesso modo in cui tratterebbe un file JPEG o EXE o HTML.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top