matlab实现二进制解码

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

一、打开二进制文件

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

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

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

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

[code lang=matlab]
fileID = filename('bin.txt','rb')
[/code]

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

[code lang=matlab]
while ~feof(fid)

end
[/code]

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

[code lang=matlab]
fclose(fileID)
[/code]

二、读取二进制内容

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

[code lang=matlab]
A = fread(fileID,sizeA,precision)
fileID :文件标识符
sizeA :读取次数
precision: 读取的类型
[/code]

显然,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。下面来看看几组例子:

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

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

[code lang=matlab]
A = fread(fileID,8,'*char');
[/code]

三、大小端的问题

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

[code lang=matlab]
% l代表小端,而b则代表大端
fileID = filename('bin.txt','rb','l')
[/code]

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

[code lang=matlab]
A = fread(fileID,1,'int32=>double','b');
[/code]

此条目发表在CODING分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据