fread

fread 

Read binary data from file

Syntax

  • [A,count] = fread(fid,size,precision)
    [A,count] = fread(fid,size,precision,skip)
    

Description

[A,count] = fread(fid,size,precision) reads binary data from the specified file and writes it into matrix A. Optional output argument count returns the number of elements successfully read. fid is an integer file identifier obtained from fopen.

size is an optional argument that determines how much data is read. If size is not specified, fread reads to the end of the file and the file pointer is at the end of the file (see feof for details). Valid options are:

n Reads n elements into a column vector.
inf Reads to the end of the file, resulting in a column vector containing the same number of elements as are in the file.
[m,n] Reads enough elements to fill an m-by-n matrix, filling in elements in column order, padding with zeros if the file is too small to fill the matrix. n can be specified as inf, but m cannot.
 

precision is a string that specifies the format of the data to be read. It commonly contains a datatype specifier such as int or float, followed by an integer giving the size in bits. Any of the strings in the following table, either the MATLAB version or their C or Fortran equivalent, may be used. If precision is not specified, the default is 'uchar'.

MATLABC or FortranInterpretation
'schar' 'signed char' Signed character; 8 bits
'uchar' 'unsigned char' Unsigned character; 8 bits
'int8''integer*1'Integer; 8 bits
'int16''integer*2'Integer; 16 bits
'int32''integer*4'Integer; 32 bits
'int64''integer*8'Integer; 64 bits
'uint8''integer*1'Unsigned integer; 8 bits
'uint16''integer*2'Unsigned integer; 16 bits
'uint32''integer*4'Unsigned integer; 32 bits
'uint64''integer*8'Unsigned integer; 64 bits
'float32''real*4'Floating-point; 32 bits
'float64''real*8'Floating-point; 64 bits
'double''real*8'Floating-point; 64 bits
 

.

The following platform dependent formats are also supported but they are not guaranteed to be the same size on all platforms. 

MATLABC or FortranInterpretation
'char' 'char*1'Character; 8 bits 
'short' 'short' Integer; 16 bits
'int' 'int' Integer; 32 bits
'long' 'long' Integer; 32 or 64 bits
'ushort''unsigned short'Unsigned integer; 16 bits
'uint' 'unsigned int' Unsigned integer; 32 bits
'ulong' 'unsigned long' Unsigned integer; 32 or 64 bits
'float' 'float' Floating-point; 32 bits

 

The following formats map to an input stream of bits rather than bytes.

MATLABC or FortranInterpretation
'bitN'-Signed integer; N bits (1  N  64)
'ubitN'-Unsigned integer; N bits (1  N  64)
 

By default, numeric values are returned in class double arrays. To return numeric values stored in classes other than double, create your precision argument by first specifying your source format, and then following it with the characters "=>", and finally specifying your destination format. You are not required to use the exact name of a MATLAB class type for destination. (See class for details). fread translates the name to the most appropriate MATLAB class type. If the source and destination formats are the same, the following shorthand notation can be used.

  • *source
    

which means

  • source=>source
    

This table shows some example precision format strings.

'uint8=>uint8'Read in unsigned 8-bit integers and save them in an unsigned 8-bit integer array.
'*uint8'Shorthand version of the above.
'bit4=>int8'Read in signed 4-bit integers packed in bytes and save them in a signed 8-bit array. Each 4-bit integer becomes an 8-bit integer.
'double=>real*4'Read in doubles, convert and save as a 32-bit floating point array.
 

[A,count] = fread(fid,size,precision,skip) includes an optional skip argument that specifies the number of bytes to skip after each precision value is read. If precision specifies a bit format, like 'bitN' or 'ubitN', the skip argument is interpreted as the number of bits to skip.

When skip is used, the precision string may contain a positive integer repetition factor of the form 'N*' which prepends the source format specification, such as '40*uchar'.

  • Note    Do not confuse the asterisk (*) used in the repetition factor with the asterisk used as precision format shorthand. The format string '40*uchar' is equivalent to '40*uchar=>double', not '40*uchar=>uchar'.

When skip is specified, fread reads in, at most, a repetition factor number of values (default is 1), skips the amount of input specified by the skip argument, reads in another block of values, again skips input, and so on, until size number of values have been read. If a skip argument is not specified, the repetition factor is ignored. Use the repetition factor with the skip argument to extract data in noncontiguous fields from fixed length records.

If the input stream is bytes and fread reaches the end of file (see feof) in the middle of reading the number of bytes required for an element, the partial result is ignored. However, if the input stream is bits, then the partial result is returned as the last value. If an error occurs before reaching the end of file, only full elements read up to that point are used.

Examples

For example,

  • type fread.m
    

displays the complete M-file containing this fread help entry. To simulate this command using fread, enter the following:

  • fid = fopen('fread.m','r');
    F = fread(fid);
    s = char(F')
    

In the example, the fread command assumes the default size, inf, and the default precision, 'uchar'fread reads the entire file, converting the unsigned characters into a column vector of class 'double' (double precision floating point). To display the result as readable text, the 'double' column vector is transposed to a row vector and converted to class 'char' using the char function.

As another example,

  • s = fread(fid,120,'40*uchar=>uchar',8);
    

reads in 120 characters in blocks of 40, each separated by 8 characters. Note that the class type of s is 'uint8' since it is the appropriate class corresponding to the destination format, 'uchar'. Also, since 40 evenly divides 120, the last block read is a full block which means that a final skip will be done before the command is finished. If the last block read is not a full block then fread will not finish with a skip.

See fopen for information about reading Big and Little Endian files.

See Also

fcloseferrorfopenfprintffreadfscanffseekftellfwritefeof

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值