我想使用Matlab为VHDL testbench创建一个带有随机8位二进制数的输入文件。
%create random 10 decimal number
a = randi ( [0 255], 10 , 1 );
display(a);
%convert to 8bit binary
a=dec2bin(a,8);
display(a);
%write to textfile
fid=fopen('eventsIn.txt','wt');
fprintf(fid,'%s\n',a);
fclose(fid);
我想如何确保输出
1010100
1100100
0010100
0111101
0000110
而不是这种格式?
10101001100100001010001111010000110010011110111000101011101101101110100100100010
答案 0 :(得分:0)
修改强>
首先尝试这个:
dlmwrite('output.txt', b, '')
您目前的目的是编写所有数据,然后附加换行符。
有几种方法可以解决这个问题。 这很简单:
在线上进行for循环写作,并在每一行后添加换行符。
如果仍然无效,您可以尝试使用\r\n
代替\n
。
答案 1 :(得分:0)
你可以用你的方法来做,只改变两件事:
如果a
的每个行是一个应该写在不同行中的数字,那么在将a
提供给fprintf
之前,您应该转置fprintf(fid,'%s\n',x)
}。这是因为x
读取a.'
的第一个列,然后是第二列等。
在\n
的每一行的末尾添加回车符(ASCII代码13)或换行符(ASCII代码10)或两者(即,在新行或两个新行中) 。作为副作用,您不需要格式字符串fprintf
中的fprintf(fid, '%s', [ a.'; repmat(char(13), 1, size(a,1)) ] ) %// CR only
。
所以,使用
fprintf(fid, '%s', [a.'; repmat(char([10; 13]), 1, size(a,1))] ) %// LF and CR
或
{{1}}
答案 2 :(得分:0)
您的a
是一个二维字符数组,您希望将其解释为一系列字符串。但是,fprintf(fid,'%s\n',a)
只是将其作为一个大字符串处理。正如Dennis Jaheruddin所写,有几种方法可以实现这一目标。我认为这个很简单:
将二维字符数组转换为字符串的单元格数组:
a = cellstr(a);
将其作为(隐式)参数序列提供给fprintf
:
fprintf('%s\n', a{:})
这样,您不需要编程循环。