2014-11-17 6 views
0

У меня есть таблица, которая выглядит следующим образом:Как я могу написать биты в файл в MATLAB

'00'

'010'

'011'

' 100'

'+1010'

'1011'

'1100'

'11010'

'11011'

'11100'

'11101'

'11110'

'11111'

Это массив ячеек, который содержит двоичную кодировку некоторых символов (на основе алгоритма Шеннона-Фано. Мой вопрос в том, как написать эти коды в файл, чтобы каждый 0 и 1 интерпретировались как бит.

Как-то как fwrite(F,V{I,3},'bit1') собирается работать (двоичная кодификация находится на третьем столбце и с помощью I для определения строки)?

ответ

1

Нет, операции с файлами по сути являются байтовыми. Вы не можете писать частичные байты. Вам нужно объединить все биты в строку байтов и записать эту строку. Код может выглядеть примерно так:

allbits = cat(2, V{:,3}); % concatenate all bits into one giant binary string 
npadding = 8 - mod(length(allbits), 8); % number of bits needed to produce an even multiple of 8 
if(npadding < 8) % pad with zeros 
    allbits = [allbits repmat('0', 1, npadding)]; 
end 
bytestring = reshape(allbits, 8, []).'; % reshape into a matrix of binary strings 
bytes = bin2dec(bytestring); % convert to integers 
fwrite(fid, bytes, 'uint8'); % be sure to write out the integers as 8-bit bytes 

Этот код делает некоторые предположения, которые вы хотите, чтобы приспособиться к вашим ожиданиям: порядок бит в файле, тип заполнения для неполных байт, и т.д.

+0

Спасибо за совет, мне удалось реализовать то, что вы сказали и работает, но у меня есть проблема, когда я конкатенирую большое количество кодов. Для построения полной строки требуется очень много времени. Вы знаете, как я могу сделать операцию конкатенации меньше времени? – Xez

+0

Что может помешать на самом деле не хранить битовые строки (даже в массиве ячеек). Это неэффективное представление. Вместо этого сохраните целое число, содержащее нужные вам биты, и другое целое число с количеством действительных битов. Тогда операция конкатенации включает бит-сдвиг и побитовое или. Трудно получить это правильно, поэтому попробуйте найти местного программиста на C. – Peter

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