2013-10-15 52 views
0

我運行在MATLAB以下循環:在MATLAB一個矩陣顯示的字符串返回ASCII

對於k = 1:n的 S(K,:) = [K, 'L'] 結束

而不是獲得'l',我有108對應其ascii。

我發現了幾個關於如何將數字轉換爲ASCII值的例子。換句話說,我'read''字符'可以做的伎倆。但是,用char(108)替換'l'仍然返回108而不是char。

我注意到

對於k = 1:n的 S(K,:) = CHAR(108) 端

將顯示我 'L'。爲什麼矩陣中不是這種情況,我該如何解決這個問題?

+0

MATLAB版本解壓陣列的碎片? – nispio

+0

ubuntu上的R2012a – bigTree

回答

4

Matlab使用動態類型,根據分​​配給它的變量推斷變量的類型。例如嘗試:

x = [72 69 76 76 79 6] 
y = [72 69 76 'L' 79 6] 

注意,x成爲雙打的陣列,而y成爲字符數組。現在,如果您嘗試設置

x(2) = 'A' 

數組x將保持其類型。但如果你設置

x = [72 'A' 76 76 79 6] 

然後x將改變它的類型爲一個字符數組。如果你想強制一個數組成爲一個char數組,那麼你可以簡單地在整個數組上調用char()

x = char([72 69 76 76 79 6]) 

在你的情況,你可以只調用

s = char(s) 

通過你的循環運行後。這將把數組重寫爲chars而不是double。

另外,請注意,您不能在矩陣中混合類型。它看起來像你正在試圖把數字放在第一列和字母在第二列。這在技術上是不允許的。但是,只要您在訪問它時將第二列中的值轉換回char,就不會有問題。例如,

for k=1:n 
    s(k,:) = [k,'l']; 
end 

first_number = s(1,1); 
first_letter = char(1,2); 

基本上會讓您將數字存儲在一列中,並將字母存儲在另一列中。無論何時從矩陣中訪問它,只需確保將字母轉換爲字符。

你也可以考慮使用單元格。例如

n = 26; 
s = cell(n,2); 
for k=1:n 
    s{k,1} = k; 
    s{k,2} = 'l'; 
end 

display(s) 

如果你不喜歡Matlab的顯示單元陣列的方式,你仍然可以使用下面的符號

% Pull out individual elements 
first_number = s{1,1} 
first_letter = s{1,2} 

% Pull out the columns as matrices 
numbers_as_matrix = cell2mat(s(:,1)); 
letters_as_matrix = cell2mat(s(:,2)); 
+0

感謝您的詳細解釋 – bigTree

+0

其實,我試圖混合數字和字符串,因爲我想在一個文本文件中寫入這些。我使用dlmwriter。然而,你的方法允許我正確地提取矩陣的內容,但不能把它放在矩陣中,我以後可以寫出... – bigTree

+0

除非通過使用num2str()將數字轉換爲字符串,否則會導致問題但如果你的數字高於9,那麼由於10的ascii表示需要一串寬度爲2的字符串。 – nispio