Matlab:如何从文件中读取二进制数?

时间:2013-09-05 11:59:36

标签: file matlab math binary string-formatting

文件的二进制数由换行符分隔。

$ cat bin_MCS.txt |tail
000000001100000000000010000000000
000000010010000000000010000000000
000011000000000000000000000000000
000010100000000000000000000000000
000101000000000000000000000000000
000100100000000000000000000000000
000100001000000000000010000000000
000000110000000000000010000000000
000001010000000000000010000000000
000010001000000000000010000000000

Matlab读取DEC中的二进制数,错误

>> textread('bin_MCS.txt')

ans =

   1.0e+30 *

    0.0000
    0.0000
    0.0000
    0.0000
    0.0000
    0.0000
    0.0000
    0.0000
    0.0000
    0.0000
    0.0000
    0.0000
    0.0000

目标

  

我需要将二进制数读取到像[1 0 1; 0 1 1]这样的矩阵。第一个难题是能够读取二进制数。然后下一个难题就是能够以某种格式阅读它们。

2 个答案:

答案 0 :(得分:4)

以字符串形式读取,然后使用bin2dec转换为十进制数字:

bin2dec(textread('bin_MCS.txt','%s'))

ans =

    25166848
    37749760
   402653184
   335544320
   671088640
   603979776
   553649152
   100664320
   167773184
   285213696

编辑:

要将单个二进制数字读入矩阵,您可以使用它(48是'0'的ASCII代码):

cell2mat(textread('bin_MCS.txt','%s'))-48

答案 1 :(得分:3)

我的个人最喜欢的一个有点令人费解的事情:

>> (char(textread('bin_MCS.txt','%s'))-'0') * pow2(32:-1:0).'
ans =
    25166848
    37749760
   402653184
   335544320
   671088640
   603979776
   553649152
   100664320
   167773184
   285213696

如果您使用textscan,它甚至会比bin2dec版本更快:

tic
for ii = 1:1e3

    fid = fopen('bin_MCS.txt', 'r');
        C = textscan(fid,'%s');
    fclose(fid);

    R = (char(C{1})-'0') * pow2(32:-1:0).';

end
toc


tic
for ii = 1:1e3
    bin2dec(textread('bin_MCS.txt','%s'));
end
toc

结果:

Elapsed time is 0.182339 seconds.
Elapsed time is 15.600509 seconds.

当然,这不是一个完全公平的测试,但至少它说明存在重大差异。