文件的二进制数由换行符分隔。
$ 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]这样的矩阵。第一个难题是能够读取二进制数。然后下一个难题就是能够以某种格式阅读它们。
答案 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.
当然,这不是一个完全公平的测试,但至少它说明存在重大差异。