MATLAB中,数据的运算、读取和存储过程有时会涉及到进制的转换。不了解进制转换方法的话会非常恼火。
1、单个数据转换
比如我们想知道一个十进制数的二进制表示,来看具体的位置1还是0.这时可以用dec2bin函数。
a = 888;
b =dec2bin(a);
b =
1101111000
当然二制转十进制用bin2dec。注意此时的输入应为string类型。
a = '1101111000';b =bin2dec(a);b
b =
888
同理:dec2hex,十进制转化为十六进制;hex2dec十六进制转化为十进制;
base2dec为将任意进制转换为10进制。用法为:
a = '525'
b = base2dec(a,6);
b =
197
将6进制数a('525')转换为10进制数197.
2、矩阵转换
矩阵进制的转换和单独的数据相似。比如将矩阵['1000';'1010';'1100']转换为十进制表示的矩阵。
a = ['1000';'1010';'1100'];
b = bin2dec(a);
b =
8
10
12
注意,不能将矩阵a写为['1000','1010','1100'];这样会是什么样的结果呢?
b =
2220
因为这样相当于a等于'100010101100';
3、文件数据进制转换
比如源数据为一个xls表格,里面是一列十进制数(11,22,33,44,55,66,77,88,99),需要把这些数据转换为16进制,并重新存储。该如何操作呢?so easy.

a = xlsread('sourcedata.xls');
b = dec2hex(a);
xlswrite('data.xls',b);
结果是什么呢?

嗯?好像有点不妥呢。我们再加一句。
a = xlsread('sourcedata.xls');
b = dec2hex(a);
b = cellstr(b);
xlswrite('data.xls',b);
结果就是

如果源数据是M*N行的矩阵呢?那么我们需要在b = cellstr(b);后面加上reshape语句,将b设置为我们需要的行和列。
b = reshape(b,M,N);
假如串口调试助手等收到的数据为十六进制,我们需要进行一些处理,怎么读取这个文件呢。txt文档里的数据为:A B C D 2E 3F;
a=textread('source.txt','%s')';
a =
'A'
'B'
'C'
'D'
'2E'
'3F'
后续可以用hex2dec转化为十进制等等。
在工程中,也常常用到各种文件格式和数据类型的文件的读取、修改、存储等,这些将会在另一章中介绍。
在成长中学习,在学习中成长!