官术网_书友最值得收藏!

2.7 不同數(shù)據(jù)類型之間的轉(zhuǎn)化

MATLAB中為用戶提供了豐富的數(shù)據(jù)類型,用戶可以根據(jù)實(shí)際問(wèn)題的需要?jiǎng)?chuàng)建不同數(shù)據(jù)類型的變量,同時(shí)MATLAB也提供了各種函數(shù)用于不同類型數(shù)據(jù)之間的轉(zhuǎn)換。下面將詳細(xì)介紹不同數(shù)據(jù)類型之間常有的轉(zhuǎn)化。

1.數(shù)值類型的互相轉(zhuǎn)換

數(shù)據(jù)類型的轉(zhuǎn)換與不同數(shù)值類型變量定義的格式相同,如x2=class(x1),其中x1為原數(shù)據(jù)類型的數(shù)據(jù),x2為轉(zhuǎn)換后數(shù)據(jù)類型的數(shù)據(jù),class為轉(zhuǎn)換的數(shù)據(jù)類型。可以轉(zhuǎn)換的數(shù)據(jù)類型包括所有的數(shù)值類型,有雙精度、單精度浮點(diǎn)型,16位、32位、64位無(wú)符號(hào)整型數(shù)據(jù),16位、32位、64位有符號(hào)整型數(shù)據(jù)等。

【例2.27】數(shù)值類型的互相轉(zhuǎn)換。

>> x=32;  %定義數(shù)值類型數(shù)據(jù)x,默認(rèn)狀態(tài)下為雙精度浮點(diǎn)型
>> x1=single(x); %轉(zhuǎn)換雙精度浮點(diǎn)型數(shù)據(jù)為單精度浮點(diǎn)型數(shù)據(jù)
>> x2=uint8(x); %轉(zhuǎn)換雙精度浮點(diǎn)型數(shù)據(jù)為無(wú)符號(hào)8位整型數(shù)據(jù)
>> x3=int8(x); %轉(zhuǎn)換雙精度浮點(diǎn)型數(shù)據(jù)為有符號(hào)8位整型數(shù)據(jù)
>> whos  %查看各變量的數(shù)據(jù)類型
  Name   Size            Bytes Class
  x     1x1             8 double array
  x1    1x1             4 single array
  x2    1x1             1 uint8 array
  x3    1x1             1 int8 array
Grand total is 4 elements using 14 bytes
2.字符串與數(shù)值類型的互相轉(zhuǎn)換

字符串與數(shù)值類型的互相轉(zhuǎn)換包括數(shù)組與字符串的轉(zhuǎn)換,1~127的ASCII碼值轉(zhuǎn)換為字符,還有不同進(jìn)制數(shù)據(jù)之間的轉(zhuǎn)換等。

數(shù)組與字符串的轉(zhuǎn)換通過(guò)num2str()和str2num()函數(shù)實(shí)現(xiàn),具體的函數(shù)用法如下。

● str = num2str(A):把數(shù)值型數(shù)據(jù)數(shù)組A轉(zhuǎn)換為字符型數(shù)據(jù),默認(rèn)情況下轉(zhuǎn)換的數(shù)據(jù)精度為5位有效數(shù)字。

● str = num2str(A,precision):按照指定的數(shù)據(jù)精度轉(zhuǎn)換數(shù)組A到字符串類型數(shù)據(jù)str,precision為字符串中數(shù)據(jù)的有效位數(shù)。

● str = num2str(A,format):按照指定的數(shù)據(jù)格式轉(zhuǎn)換數(shù)組A到字符串類型數(shù)據(jù)str。format的書(shū)寫(xiě)格式為%m1.m2g/f/e,其中m1指定總共顯示的有效數(shù)字位數(shù),m2代表小數(shù)點(diǎn)后的有效數(shù)字位數(shù),“g”格式代表用指數(shù)或定點(diǎn)標(biāo)記,“e”格式代表用指數(shù)標(biāo)記,“f”格式代表用定點(diǎn)標(biāo)記,與函數(shù)sprinf()的輸出顯示設(shè)置相同。

● x = str2num('str'):字符串轉(zhuǎn)化為數(shù)組。

【例2.28】字符串與數(shù)值類型的互相轉(zhuǎn)換

>> a=rand(3); %生成隨機(jī)矩陣a
>> s=num2str(a) %數(shù)組a轉(zhuǎn)換為字符串s
s =
0.95013   0.48598   0.45647
0.23114   0.8913  0.018504
0.60684   0.7621   0.82141
>> s=num2str(a,3) %數(shù)組a轉(zhuǎn)換為字符串s,保留小數(shù)點(diǎn)后3位
s =
0.95   0.486   0.456
0.231   0.891  0.0185
0.607   0.762   0.821
>> s=num2str(a,'%3.2e') %轉(zhuǎn)換為字符串s,保留3位有效數(shù)字,小數(shù)點(diǎn)后留2位,以指數(shù)形式輸出
s =
9.50e-0014.86e-0014.56e-001
2.31e-0018.91e-0011.85e-002
6.07e-0017.62e-0018.21e-001
>> s=num2str(a,'%3.2g') %轉(zhuǎn)換為字符串s,保留3位有效數(shù)字,小數(shù)點(diǎn)后留2位,以“g”格式輸出
s =
0.950.490.46
0.230.890.019
0.610.760.82
>> s=num2str(a,'%3.2f') %轉(zhuǎn)換為字符串s,保留3位有效數(shù)字,小數(shù)點(diǎn)后留2位,以“f”格式輸出
s =
0.950.490.46
0.230.890.02
0.610.760.82

另外,int2str()函數(shù)和str2int()函數(shù)可以完成整型數(shù)據(jù)與字符串的轉(zhuǎn)換,即取整數(shù)據(jù)與字符串的轉(zhuǎn)換。mat2str()函數(shù)和str2mat()函數(shù)可以實(shí)現(xiàn)矩陣與字符串的轉(zhuǎn)換,其用法類似于num2str()函數(shù)和str2num()函數(shù),但不可以用于高維數(shù)組,可以參見(jiàn)MATLAB的幫助文檔。

ASCII碼值與字符之間的轉(zhuǎn)換通過(guò)char()函數(shù)和abs()函數(shù)來(lái)實(shí)現(xiàn)。

【例2.29】ASCII碼值與字符之間的轉(zhuǎn)換。

>> abs('A') %字符轉(zhuǎn)換為ASCII碼值
ans =
   65
>> char(65)  % ASCII碼值轉(zhuǎn)換為字符
ans =
A
>> char([65:127]) %多個(gè)ASCII碼值轉(zhuǎn)換為字符
ans =
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

MATLAB中還提供了一些函數(shù)用于不同進(jìn)制數(shù)據(jù)之間的轉(zhuǎn)換,其中涉及十進(jìn)制數(shù)與其他各進(jìn)制數(shù)字符串之間的轉(zhuǎn)換,主要涉及的函數(shù)如下。

● dec2hex(x)和hex2dec(x):用于十六進(jìn)制數(shù)和十進(jìn)制數(shù)之間的相互轉(zhuǎn)換。

● dec2bin(x)和bin2dec(x):用于二進(jìn)制數(shù)和十進(jìn)制數(shù)之間的相互轉(zhuǎn)換。

● str = dec2base(d,base)和d = base2dec('strn',base):用于任意進(jìn)制的數(shù)與十進(jìn)制數(shù)之間的轉(zhuǎn)換。

【例2.30】不同進(jìn)制數(shù)據(jù)之間的轉(zhuǎn)換。

>> s=dec2hex(59) %十進(jìn)制數(shù)59轉(zhuǎn)換為十六進(jìn)制數(shù)
s =
3B
>> n=hex2dec('1B') %十六進(jìn)制數(shù)“1B”轉(zhuǎn)換為十進(jìn)制數(shù)
n =
    27
>> s=dec2bin(19) %十進(jìn)制數(shù)19轉(zhuǎn)換為二進(jìn)制數(shù)
s =
10011
>> n=bin2dec('100011') %二進(jìn)制數(shù)“100011”轉(zhuǎn)換為十進(jìn)制數(shù)
n =
    35
>> s=dec2base(33,8) %十進(jìn)制數(shù)33轉(zhuǎn)換為八進(jìn)制
s =
41
>> n=base2dec('222',8) %十進(jìn)制數(shù)“222”轉(zhuǎn)換為十進(jìn)制
n =
  146
3.元胞數(shù)組與數(shù)值類型的互相轉(zhuǎn)換

元胞數(shù)組與數(shù)值類型的互相轉(zhuǎn)換通過(guò)num2cell()函數(shù)來(lái)實(shí)現(xiàn),具體用法如下。

● c = num2cell(A):轉(zhuǎn)換數(shù)組A到元胞數(shù)組c。

● c = num2cell(A,dims):按照指定的維數(shù)轉(zhuǎn)換數(shù)組A到元胞數(shù)組c。

【例2.31】元胞數(shù)組與數(shù)值類型的互相轉(zhuǎn)換。

>> A=magic(3)
A =
    8   1   6
    3   5   7
    4   9   2
>> num2cell(A)  %轉(zhuǎn)換數(shù)組A到元胞數(shù)組
ans =
    [8]  [1]  [6]
    [3]  [5]  [7]
    [4]  [9]  [2]
>> num2cell(A,[1,9]) %按指定維數(shù)轉(zhuǎn)換數(shù)組A到元胞數(shù)組
ans =
    [3x1 double]  [3x1 double]  [3x1 double]
4.字符串、元胞數(shù)組、結(jié)構(gòu)體之間的互相轉(zhuǎn)換

函數(shù)char和cellstr用于元胞數(shù)組和字符串之間的轉(zhuǎn)換;函數(shù)cell2struct和struct2cell可用于元胞數(shù)組和結(jié)構(gòu)體的轉(zhuǎn)換。下面以實(shí)例來(lái)具體演示這些函數(shù)的使用。

【例2.32】字符串、元胞數(shù)組、結(jié)構(gòu)體之間的互相轉(zhuǎn)換。

>> str2CELL=cellstr({'abc', 'def';'ABC','DEF'}) %字符串轉(zhuǎn)換為元胞數(shù)組
str2CELL =
    'abc'  'def'
    'ABC'  'DEF'
>> class(str2CELL)
ans =
cell
>> cell2str=char(Str2cell)   %元胞數(shù)組轉(zhuǎn)換為字符串
cell2str =
abc
ABC
def
DEF
>> class(cell2str)
ans =
char
>> c2s=cell2struct(str2CELL,'A',4)  %元胞數(shù)組轉(zhuǎn)換為結(jié)構(gòu)體
c2s =
2x2 struct array with fields:
    A
>> class(c2s)
ans =
struct
>> s2c=struct2cell(c2s)   %結(jié)構(gòu)體轉(zhuǎn)換為元胞數(shù)組
s2c(:,:,1) =
    'abc'  'ABC'
s2c(:,:,2) =
    'def'  'DEF'
>> class(s2c)
ans =
cell
主站蜘蛛池模板: 呼图壁县| 江都市| 绵竹市| 桂林市| 辰溪县| 确山县| 托克逊县| 若尔盖县| 阿合奇县| 赤壁市| 兴义市| 连云港市| 屏南县| 昭觉县| 寿阳县| 巴马| 宜春市| 射洪县| 苍梧县| 多伦县| 格尔木市| 双辽市| 钟山县| 儋州市| 阜宁县| 金门县| 滦平县| 海门市| 曲松县| 黎城县| 建湖县| 容城县| 大连市| 崇仁县| 兖州市| 新田县| 茶陵县| 五大连池市| 志丹县| 西畴县| 水城县|