如何在matlab中将位写入文件

时间:2014-11-17 20:00:45

标签: matlab

我有一个看起来像这样的表:

  

' 00'

     

' 010'

     

' 011'

     

' 100'

     

' 1010'

     

' 1011'

     

' 1100'

     

' 11010'

     

' 11011'

     

' 11100'

     

' 11101'

     

' 11110'

     

' 11111'

这是一个包含某些字符的二进制编码的单元格数组(基于Shannon-Fano算法)。 我的问题是我如何将这些代码写入文件,以便每个0和1被解释为一个。

fwrite(F,V{I,3},'bit1')是否正常工作(二进制编码在第三列并使用我来识别行)?

1 个答案:

答案 0 :(得分: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

此代码做了一些假设,您需要根据自己的期望进行调整:文件中的位顺序,不完整字节的填充类型等。