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轉化為十進位等等。
在工程中,也常常用到各種文件格式和數據類型的文件的讀取、修改、存儲等,這些將會在另一章中介紹。
在成長中學習,在學習中成長!