2012-07-02 102 views
1

爲什麼表達:變換串/焦炭到UINT8

test = cast(strtrim('3'), 'uint8') 

產生51?

這也適用於:

test = cast(strtrim('3'), 'int8') 

感謝。

+2

因爲51是'3'的ASCII值? –

+0

夠公平的。有道理。謝謝。 – cs0815

回答

3

因爲51是字符'3'ASCII code

如果你想將字符串轉換爲數字3,你應該使用

uint8(str2double('3')) 

注意str2double會忽略尾隨空格,使strtrim是沒有必要的。

EDIT

當字符串是在數字運算中使用,MATLAB自動將其轉換到其ASCII值。例如

>> '1'+1 
ans = 
    50 
+1

您可以使用最後一個屬性輕鬆地將字符串數字轉換爲數字:'strnumbers ='1234567890';''strnumbers-'0''返回數組''1 2 3 4 5 6 7 8 9 0]' –

+0

但必須要小心,因爲'0'-0'返回48. – Jonas

+0

你是不是指'0 -'0''返回-48?確實如此,但也適用於任何函數,例如:'str2double(0)返回'NaN'這是開發人員/程序員做出正確的實現並在必要時捕獲不正確的輸入。 –

1

這是因爲'3'被看作是matlab的ASCII字符。通過將一個有符號或無符號整數(在這種情況下是8位)進行轉換,您要求Matlab將ASCII'3'轉換爲十進制數。在這種情況下,十進制數字是51.如果你想看更多的轉換here是一個基本的文件。