matlab实现二进制解码

最近需要做一个二进制解码的工作,因为某些原因,必须使用matlab程序完成,下面就说说如何实现matlab下的二进制解码工作。

一、打开二进制文件

matlab打开文件的的函数是fopen,它的基本使用方法为:

fileID = fopen(filename,permission)
    filename    : 文件名
    permission  : 打开文件的方式
    fileID      : 就是打开文件的标识了(就是一个整数)

显然,permission是fopen的关键所在,而这个参数英文所代表的含义却又让人觉得相当迷惑。事实上,permission指的是读写的权限,在linux下的含义相对来说还是要较为明确的。

使用fopen打开二进制文件bin.txt的方法为(r:read,b:binary)

fileID = filename('bin.txt','rb')

那么如何判定文件到末尾了呢,这个使用feof函数即可:

while ~feof(fid)
    ...
end

注意,在结束文件读取之后,要记得关闭文件:

fclose(fileID)

二、读取二进制内容

读取二进制文件的函数是fread,其基本用法为:

A = fread(fileID,sizeA,precision)
    fileID  :文件标识符
    sizeA   :读取次数
    precision: 读取的类型

显然,precision是读取二进制文件的关键,在matlab中precsion主要支持的有(括号内部的是占的字节数):

  1. 无符号整型:uint(4) uint8(1) uint16(2) uint32(4) uint64(8) ushort(2) ulong(4)
  2. 有符号整型:int(4) int8(1) int16(2) int32(4) int64(8) short(2) long(4)
  3. 符点型: sigle(4) double(8) float(4) float32(4) float64(8)
  4. 字符型: char(1)

而precision可以决定输入和输出类型,采用的形式为'source => output',其中source就是输入的类型,而output则是输出的类型。默认的输出类型是double。下面来看看几组例子:

% 转换1个4字节的的整型
A = fread(fileID,1,'int32=>double');
% 转换8个字符
A = fread(fileID,8,'char=>char');

当然这种char=>char看起来就比较繁琐,matlab还是支持使用*char来简化。

A = fread(fileID,8,'*char');

三、大小端的问题

二进制解码自然少不了大小端的问题,matlab提供了两种解决方案。首先fopen可附加参数,表示整个二进制文件均采用同一种大小端的解码方式。

% l代表小端,而b则代表大端
fileID = filename('bin.txt','rb','l')

其次fread也同样的可以附加参数,表示本次读取下解码方式:

A = fread(fileID,1,'int32=>double','b');
此条目发表在CODING分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。