前言
本文主要讲解了Matlab中使用到的数据类型之间的转换以及数据格式处理技巧,持续更新。。。
一、字节数组转浮点数
字节数组转浮点数通常用在解析HEX协议中,将4字节或8字节HEX数据解析为浮点数
1、4字节转single
test_data.dat数据中包含两组4bytes数据,如下图:
通过以下代码将test_data.dat的数据转换为2个single类型数据:
clear;clc;close all;
data = load('test_data.dat');
[m, n] = size(data);
f_array = zeros(1,m); %新建存single数据数组,初始化为0
for i=1:m
f_array(i)=typecast(uint8(data(i,1:4)), 'single');%提取data中的1-4列进行转换
end
转换结果如下:
2、8字节转double
8字节转double同理4字节转float,将下列代码:
f_array(i)=typecast(uint8(data(i,1:4)), 'single');%提取data中的1-4列
改为:
f_array(i)=typecast(uint8(data(i,1:8)), 'double');%提取data中的1-8列
即可,前提是test_data.dat中数据每行必须为8列。
二、数组行列数据交换
列数据交换可用在数据解析时大小端问题处理
1、数组两行数据交换位置
data = [1 2 3; 4 5 6; 7 8 9]
data1=data;
data1([1,3],:) = data1([3,1],:); %1,3行交换
交换结果如下:
2、数组两列数据交换位置
data = [1 2 3; 4 5 6; 7 8 9]
data2=data;
data2(:,[1,3]) = data2(:,[3,1]); %1,3列交换
交换结果如下:
三、矩阵两列数据数值加减乘除运算
以两列数据相乘和相加为例,相除参考相乘,相减参考相加
data = [1 2 3; 4 5 6; 7 8 9]
data3 = data(1:3,1) .* data(1:3,3) %第一列和第三列相乘,1:3表示1~3行数据,两行的运算方式同两列运算
data4 = data(1:3,1) + data(1:3,3)
注意:乘除使用.*和./
转换结果如下: