2

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

$ 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]。第一个难题是能够读取二进制数。然后下一个难题是能够以某种格式阅读它们。

4

2 回答 2

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
于 2013-09-05T12:06:08.323 回答
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.

诚然,这不是一个完全公平的测试,但至少它说明存在实质性差异。

于 2013-09-05T12:31:50.437 回答