2013-11-26 6 views
0

Я пытаюсь закодировать код Хэмминга (язык python) для данных, содержащихся в .txt-файле. Как я могу это сделать? Я должен прочитать данные по строкам, преобразовать в символы ascii, а затем вычислить код помех на нем. Или есть ли какая-либо функция или библиотека в python, которая может служить в качестве окна и может работать со всем файлом как один?Вычислить код Хэмминга в файлах

Ваш отзыв очень оценен. Чем вы заранее.

Редактировать: Сценарий - архитектура клиентского сервера. Клиент пытается загрузить файл на сервер после вычисления hamming кода данных и сохраняет его на сервере. Позже, когда он пытается восстановить файл, он проверяет код помех и обнаруживает любую ошибку, которая могла произойти.

+0

Существует много форм кодов Хэмминга (http://en.wikipedia.org/wiki/Hamming_code). Что вы пытаетесь достичь? Общим подходом может быть применение 7,4 кода помех для каждого nybble каждого байта в файле, что приведет к созданию нового файла почти в два раза большего размера. Но даже с кодом 7,4 вам решать, как представлять кодированные данные. – Neil

+0

Да, я бы попробовал (7,4) код помех по данным. Мое внимание здесь - отказоустойчивость, поэтому я не возражаю удваивать размер файла. Мой вопрос заключается в том, что чтение данных неизбежно или если в python есть какая-либо функция библиотеки, которая может служить моей цели. Спасибо @Neil – kate

+0

Вы можете mmap файл –

ответ

1

Используя отображение:

# create a dict that maps input bytes to their hamming-encoded version. This 
# can be pre-calculated and hard-coded, or generated at startup 
hamming = { 
    0x00: 0x0000, # these numbers are nonsense. Input byte 0x00 is 
        # being mapped to output bytes 0x0000 
    0x01: 0x0101, 
    ... 
    0xff: 0x10cf 
} 

# read the source binary file 
with open('input.bin', 'r') as infile: 
    data = [int(x) for x in infile.read()] 

# translate the input data into its encoded form (1 byte becomes 2 with parity added, etc) 
output = '' 
for byte in data: 
    encoded = hamming[byte] 
    output += chr((encoded >> 8) & 0xff) 
    output += chr((encoded >> 0) & 0xff) 

# write the encoded data to a file 
with open('output.bin', 'w') as out:  
    out.write(output) 

Помимо любых ошибок и недостатков здесь, это просто до вас, чтобы определить 256 записей в Словаре hamming.

Смежные вопросы