我想用Matlab为VHDL测试平台创建一个具有随机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发布于 2013-11-29 15:14:56
你可以用你的方法来做这件事,只改变两件事:
a的每一行都是一个应该在不同行中写入的数字,那么在将其输入fprintf之前,您应该转置a。这是因为fprintf(fid,'%s\n',x)读取x的第一列,然后读取第二列等等。a.'的每一列末尾(即新行或新行)添加一个回车(ASCII代码13)或行提要(ASCII代码10)或两者。作为附带结果,您不需要\n格式的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发布于 2013-11-29 14:31:06
编辑
先试试这个:
dlmwrite('output.txt', b, '')您目前似乎要做的是编写所有数据,然后追加一个换行符。
有几种方法可以解决这个问题。这是一个简单的问题:
在这些行上执行for循环,并在每一行后面追加一条新行。
如果这仍然不起作用,您可以尝试使用\r\n而不是\n。
发布于 2013-11-29 15:15:35
您的a是一个二维字符数组,您希望被解释为字符串序列。然而,fprintf(fid,'%s\n',a)只是把它当作一个大字符串来处理。正如丹尼斯·贾赫鲁丁()所写,有几种方法可以实现这一点。我觉得这个很简单:
将二维字符数组转换为字符串的单元格数组:
a = cellstr(a);将其作为(隐式)参数序列提供给fprintf:
fprintf('%s\n', a{:})这样,就不需要编写循环程序了。
https://stackoverflow.com/questions/20287007
复制相似问题