我有一个看起来像这样的表:
' 00'
' 010'
' 011'
' 100'
' 1010'
' 1011'
' 1100'
' 11010'
' 11011'
' 11100'
' 11101'
' 11110'
' 11111'
这是一个包含某些字符的二进制编码的单元格数组(基于Shannon-Fano算法)。 我的问题是我如何将这些代码写入文件,以便每个0和1被解释为一个。
fwrite(F,V{I,3},'bit1')
是否正常工作(二进制编码在第三列并使用我来识别行)?
答案 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
此代码做了一些假设,您需要根据自己的期望进行调整:文件中的位顺序,不完整字节的填充类型等。