加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

(转)matlab中fprintf, fscanf, fwrite, fread函数的用法

(2014-09-23 18:42:32)
标签:

matlab函数

分类: MATLAB及信号分析
 
 
分类: MATLAB2012-11-27 20:44 2851人阅读 评论(2) 收藏 举报
 
fwrite写的是二进制内容,fprintf写的是数字转换成ASCII码之后的字符。两者都把数字64写入一个文件,用记事本打开看下,fwrite写的打开是乱码,fprintf写入的是6和4这两个字符。因为fwrite写的是64的二进制表示(4个字节,前面全是0,最后八位是0100000),fprintf写入的实际内容是36H和34H(16进制表示的字符6和字符4的ASCII编码)
 
fscanf和fpintf是一对,用fprintf写的必须用fscanf来读。
fread和fwrite是一对,用fwrite写的必须用fread来读。
同样的数据,使用fprintf和fwrite写下去的是不一样的,但是使用其相应的读命令读上来的数据会是一样的。
 
文件格式:文本文件(ASCII文件)和二进制文件。我们平时能够用记事本看的文件就是文本文件。‘
文本文件使用fscanf格式读取。二进制文件用fread读取。
 
int v=1;
fwrite(&v,sizeof(int),1,f);//文件中被写四个字节0x01 0x00 0x00 0x00(32位int,小端存储)
fprintf(f,"%d",v);//文件中被写一个字节0x31(即'1'的ASCII码)
又比如
int v=0x12345678;
fwrite(&v,sizeof(int),1,f);//文件中被写四个字节0x78 0x56 0x34 0x12(32位int,小端存储)
fprintf(f,"%x",v);//文件中被写八个字节0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38
fprintf(f,"%d",v);//文件中被写九个字节0x33 0x30 0x35 0x34 0x31 0x39 0x38 0x39 0x36
(因为0x12345678==305419896)
 
 
[plain] view plaincopy
  1. clear  
  2. clc  
  3.   
  4. cd('C:\Documents and Settings\Administrator\桌面\matlab\test');  
  5.   
  6. 10;  
  7. fid fopen('myData.txt', 'w');  
  8. fprintf(fid, '%d ', a);  
  9. fclose(fid);  

      上述程序生成了myData.txt文件,其中的内容为:

1 2 3 4 5 6 7 8 9 10

 

[plain] view plaincopy
  1. clear  
  2. clc  
  3.   
  4. cd('C:\Documents and Settings\Administrator\桌面\matlab\test');  
  5.   
  6. fid fopen('myData.txt', 'r');  
  7. [a count] fscanf(fid, '%d', inf);  
  8. fclose(fid);  

      上述程序从myData.txt中读取数据,放在列向量a中,最终count = 10; a = [1;2;3;4;5;6;7;8;9;10];

 

[plain] view plaincopy
  1. clear  
  2. clc  
  3.   
  4. cd('C:\Documents and Settings\Administrator\桌面\matlab\test');  
  5.   
  6. 255;  
  7. fid fopen('myFile.yuv', 'wb');  
  8. fwrite(fid, a, 'uchar');  
  9. fclose(fid);  

      上述程序是以二进制方式存的0-255, 用文本文件方式打开肯定是乱码, 所以要用UltraEdit打开,真正看到的是存储在里面的比特位, 用UltraEdit看到的结果是: 00 01 02 ...... FE FF

 

[plain] view plaincopy
  1. clear  
  2. clc  
  3.   
  4. cd('C:\Documents and Settings\Administrator\桌面\matlab\test');  
  5.   
  6. fid fopen('myFile.yuv', 'rb');  
  7. [a count] fread(fid, inf, 'uchar');  
  8. fclose(fid);  

      上述程序读取myFile.yuv文件中的内容,count = 256; a = [0;1;2;...;254;255];

 

 

 

 

      以上用的都是向量,实际上可以用矩阵,有时候,用矩阵更方便. 为了简便起见,仅仅考虑把数据读到矩阵中(不考虑把矩阵写进文件)

[plain] view plaincopy
  1. clear  
  2. clc  
  3.   
  4. cd('C:\Documents and Settings\Administrator\桌面\matlab\test');  
  5.   
  6. fid fopen('myData.txt', 'r');  
  7. [a count1] fscanf(fid, '%d', [5 2]);  
  8. fclose(fid);  
  9.   
  10. fid fopen('myFile.yuv', 'rb');  
  11. [b count2] fread(fid, [16 16], 'uchar');  
  12. fclose(fid);  


      count1 = 10; count2 = 256; a和b都是矩阵的形式

a =

        6
        7
        8
        9
       10

b =

       16    32    48    64    80    96   112   128   144   160   176   192   208   224   240
       17    33    49    65    81    97   113   129   145   161   177   193   209   225   241
       18    34    50    66    82    98   114   130   146   162   178   194   210   226   242
       19    35    51    67    83    99   115   131   147   163   179   195   211   227   243
       20    36    52    68    84   100   116   132   148   164   180   196   212   228   244
       21    37    53    69    85   101   117   133   149   165   181   197   213   229   245
       22    38    54    70    86   102   118   134   150   166   182   198   214   230   246
       23    39    55    71    87   103   119   135   151   167   183   199   215   231   247
       24    40    56    72    88   104   120   136   152   168   184   200   216   232   248
       25    41    57    73    89   105   121   137   153   169   185   201   217   233   249
    10    26    42    58    74    90   106   122   138   154   170   186   202   218   234   250
    11    27    43    59    75    91   107   123   139   155   171   187   203   219   235   251
    12    28    44    60    76    92   108   124   140   156   172   188   204   220   236   252
    13    29    45    61    77    93   109   125   141   157   173   189   205   221   237   253
    14    30    46    62    78    94   110   126   142   158   174   190   206   222   238   254
    15    31    47    63    79    95   111   127   143   159   175   191   207   223   239   255

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有