将二进制字符串打印到具有特定行长度的文本文件

时间:2017-03-13 03:59:58

标签: matlab binary printf

Unix + matlab R2016b

我有一个带有数字的昏暗表,我想将其导出到文本文件中的12位二进制表。

x = [0:1:250];
a = exp(-((x*8)/350));
b = exp(-((x*8)/90));
y = a-b;
y_12bit = y*4095;
y_12bitRound = ceil(y_12bit);
y_12bitRoundBinary = de2bi(y_12bitRound,12);

fileID = fopen('expo_1.txt','w');
fprintf(fileID,'%12s',y_12bitRoundBinary);

现在,当我在控制台中打印时,y_12bitRoundBinary看起来很好。

y_12bitRoundBinary =

 0     0     0     0     0     0     0     0     0     0     0     0
 0     0     0     0     0     0     0     0     1     0     0     0
 0     0     1     0     0     1     1     1     1     0     0     0
 0     0     0     0     1     1     0     1     0     1     0     0
 0     0     1     0     0     1     1     0     1     1     0     0
 0     0     1     0     0     0     0     0     0     0     1     0

这看起来不错,但我希望这个顺序可以颠倒。 MSB是向右的,我想要一个小端序。另外,我不知道这种打印是否真的证明y_12bitRoundBinary是正确的。

  1. 每个位之间是否有空格或者这只是打印功能的格式?

  2. 如何更改订单?

  3. 写入文件expo_1.txt的数据的第一行:

    0000 0000 0000 0000 0000 0101 0001 0001
    0001 0000 0101 0001 0101 0100 0000 0100
    0101 0000 0000 0100 0100 0101 0000 0100
    0000 0001 0001 0101 0100 0100 0000 0100
    0101 0101 0001 0101 0000 0101 0101 0100
    0100 0000 0101 0001 0101 0101 0100 0101
    

    如您所见,与在Matlab控制台中打印y_12bitRoundBinary的方式相比,数据无法识别。

    1. 有人会对我的错误与写入文件的数据有关吗?

1 个答案:

答案 0 :(得分:1)

假设您希望将数字打印为ASCII字符串,这将起作用

x = 0:250;
a = exp(-((x*8)/350));
b = exp(-((x*8)/90));
y = a-b;

% Reduce to 12 bit precision
y_12bit = y*2^12;
y_12bitRound = floor(y_12bit);

% Convert y_12bitRound to char arrays with 12 bits precision
y_12bitCharArray = dec2bin(y_12bitRound,12);

% Convert to cell array of string
y_12bitCellArray = cellstr(y_12bitCharArray);

fileID = fopen('expo_1.txt','wt');
fprintf(fileID,'%s\n', y_12bitCellArray{:});
fclose(fileID);

这会将以下内容打印到文件expo_1.txt

000000000000
000011111111
000111100100
001010101111
001101100011
010000000011
010010010000
...

诀窍是将char数组转换为字符串的单元格数组,这样可以根据需要使用{:}运算符扩展单元格数组,从而更容易打印。