字串轉換(String Conversions)

Octave 中有許多字串與數值間的轉換函數,例如可以將函有十六進位數字的字串轉換為浮點數:

hex2dec("FF")

輸出為

ans =  255
bin2dec (s)

bin2dec(s) 函數會將字串 s 中的二進位數字轉為十進位的數值後傳回,例如:

bin2dec("1110")

輸出為

ans =  14

s 為字元矩陣,則會分別將 s 的每一列(row)各轉為一個十進位數值,產生一個行(column)向量並傳回,若有無法轉換的內容,則會產生 NaN。例如:

bin2dec(["1110"; "101001"])
ans =

   14
   41
dec2bin (n, len)

dec2bin(n) 函數會將非負的數值 n 轉換為二進位的數字所構成的字串,例如:

dec2bin(14)

輸出為

ans = 1110

n 為一個向量,則會將向量中的每一個數值個別轉換為二進位的數字所構成的字元矩陣,矩陣中每一個列(row)對應到向量中的每一個數值,而長度較短的列會在開頭補上 0,讓所有的列都有相同的長度,例如:

dec2bin([6, 3, 98])
ans =

0000110
0000011
1100010

參數 len 是指定轉換出來的字串的最大長度。

dec2hex (n, len)

dec2hex(n) 函數會將非負的數值 n 轉換為十六進位的數字所構成的字串,例如:

dec2hex(2748)

輸出為

ans = ABC

n 為一個向量,則會將向量中的每一個數值個別轉換為十六進位的數字所構成的字元矩陣,矩陣中每一個列(row)對應到向量中的每一個數值,而長度較短的列會在開頭補上 0,讓所有的列都有相同的長度,例如:

dec2hex([62, 31, 8987])

輸出為

ans =

003E
001F
231B

參數 len 是指定轉換出來的字串的最大長度。

hex2dec (s)

hex2dec(s) 函數會將非負的數值 n 轉換為十六進位的數字所構成的字串,例如:

hex2dec ("12B")

輸出為

ans =  299
hex2dec ("12b")

輸出為

ans =  299

s 為字元矩陣,則會分別將 s 的每一列(row)各轉為一個十進位數值,產生一個行(column)向量並傳回,若有無法轉換的內容,則會產生 NaN。例如:

hex2dec (["12b"; "abcd"])
ans =

     299
   43981
dec2base (n, b, len)

dec2base(n, b) 函數會將非負的整數 n 轉換為 b 進位的數字的字串,例如:

dec2base(123, 3)

輸出為

ans = 11120

n 為一個向量,則會將向量中的每一個數值個別轉換為 b 進位的數字所構成的字元矩陣,矩陣中每一個列(row)對應到向量中的每一個數值,而長度較短的列會在開頭補上 0,讓所有的列都有相同的長度,例如:

dec2base([62, 31, 8987], 3)

輸出為

ans =

000002022
000001011
110022212

b 為一個字串,則 b 中的字元會被用來表示數字(空白字元無法使用),例如:

dec2base(123, "aei")

輸出為

ans = eeeia

參數 len 是指定轉換出來的字串的最大長度。

base2dec (s, b)

bin2dec(s) 函數會將字串 s 中的 b 進位數字轉為十進位的數值後傳回,例如:

base2dec("11120", 3)

輸出為

ans =  123

s 為字元矩陣,則會分別將 s 的每一列(row)各轉為一個 b 進位數值,產生一個行(column)向量並傳回,若有無法轉換的內容,則會產生 NaN。每一列在轉換前會先將內容靠右對齊,因此結尾的空白會被忽略。例如:

base2dec(["000002022"; "000001011"; "110022212"], 3)

輸出為

ans =

     62
     31
   8987

b 為字串,則會使用 b 中的字元來解析數值(空白字元無法使用),例如:

base2dec("yyyzx", "xyz")

輸出為

ans =  123
s = num2hex (n)

num2hex(n) 函數會將雙精度浮點數的純量或陣列 n 轉換為 IEEE 754 標準的十六進位數字所構成的字串,此字串的長度為 16 個字元,例如:

num2hex ([-1, 1, e, Inf, NaN, NA])

輸出為

ans =

bff0000000000000
3ff0000000000000
4005bf0a8b145769
7ff0000000000000
7ff8000000000000
7ff840f440000000
n = hex2num (s)

hex2num(s) 函數會將 IEEE 754 標準的十六進位數字所構成的字串轉換為雙精度浮點數,若輸入的字串長度小於 16,則 Octave 會自動在字串後方以 '0' 補齊 16 個字元。

hex2num ("4024000000000000")

輸出為

ans =  10
hex2num ("4024")

輸出為

ans =  10

s 為字元矩陣,則會將每個列(row)個別轉換為雙精度浮點數,傳回一個行(column)向量,例如:

hex2num (["4005bf0a8b145769";"4024000000000000"])

輸出為

ans =

    2.7183
   10.0000
[num, status, strarray] = str2double (str, cdelim, rdelim, ddelim)

str2double(str) 函數會將字串 str 轉換為數值,其可接受的格式為 [+-]d[.]dd[[eE][+-]ddd] 其中 d 代表數字 0-9,中括弧包起來的部份是選擇性的(可有可無)。

傳回值的 num 是轉換出來的數值資料,若轉換失敗(例如傳入的字串格式不正確時)則 status 會設為 -1,而 num 會設為 NaN。傳回值 status 在轉換成功時會被設為 0,否則會被設為 -1

strarray 是一個字串的巢狀陣列。

str 是一個字元陣列或是字串的巢狀陣列,則 numstatus 會傳回對應大小的矩陣。str 亦可以包含多個元素,各元素之間以行與列的分隔符號(cdelimrdelim)分隔。

cdelim 為行(column)的分隔符號,預設為 Tab、空白(Space)與逗號(Comma)(ASCII 碼為 9、32 與 44);rdelim 為列(row)的分隔符號,預設為 newline、carriage return 與 semicolon(ASCII 碼為 10、13 與 59);ddelim 為數字的分隔符號(decimal delimiter),預設為句點(.)(ASCII 碼為 46)。cdelimrdelimddelim 可以使用的字原有:null、newline、carriage return、semicolon、colon、slash、tab、space、comma 或 '()[]{}'(ASCII 碼為 0, 9, 10, 11, 12, 13, 14, 32, 33, 34, 40, 41, 44, 47, 58, 59, 91, 93, 123, 124, 125)

以下是一些範例:

str2double ("-.1e-5")

輸出為

ans = -1.0000e-06
str2double (".314e1, 44.44e-1, .7; -1e+1")

輸出為

ans =

    3.14000    4.44400    0.70000
  -10.00000        NaN        NaN
line = "200, 300, NaN, -inf, yes, no, 999, maybe, NaN";
[x, status] = str2double (line)

輸出為

x =

   200   300   NaN  -Inf   NaN   NaN   999   NaN   NaN

status =

   0   0   0   0  -1  -1   0  -1   0
str2double() 函數與 str2num() 函數功能類似,但 str2double() 函數不是使用 eval 的方式進行轉換,因此無法處理未知的數值格式。
strjust (s, align)

strjust(s, align) 函數會將字串 s 依照參數 align 所指定的方式對齊字串,參數 align 可用的選項有 "left""center""right",若沒有指定 align 參數則預設為 "right"。若 s 為字串陣列,則會對齊陣列中每一個字串。字串中的 null 字元會被替換成空白字元。例如:

strjust (["a"; "ab"; "abc"; "abcd"])

輸出為

ans =

   a
  ab
 abc
abcd
str2num (s)

str2num(s) 函數會將字串 s 轉換為數值,若 s 為字元陣列則轉換結果為數值陣列,例如:

str2num("3.141596")

輸出為

ans =  3.1416
str2num(["1, 2, 3"; "4, 5, 6"])

輸出為

ans =

   1   2   3
   4   5   6
str2num() 函數在轉換時是使用 eval() 函數做轉換,因此在 s 中所有的程式碼都會被執行,若要避免執行 s 之中的程式碼,可以使用 str2double() 替代 。
toascii (s)

toascii(s) 函數會將字串 s 轉換為 ASCII 碼,例如:

toascii ("ASCII")

輸出為

ans =

   65   83   67   73   73
tolower (s)
lower (s)

tolower(s)lower(s) 函數會將字串 s 中的大寫字母轉換為小寫字母,其餘的字元保持不變,例如:

tolower ("MiXeD cAsE 123")

輸出為

ans = mixed case 123
toupper (s)
upper (s)

toupper(s)upper(s) 函數會將字串 s 中的小寫字母轉換為大寫字母,其餘的字元保持不變,例如:

toupper ("MiXeD cAsE 123")

輸出為

ans = MIXED CASE 123
do_string_escapes (string)

do_string_escapes(string) 函數會將字串 string 中的跳脫字元轉為對應的特殊字元,例如:

string = 'abc\ndef';
do_string_escapes(string)

輸出為

ans = abc
def
undo_string_escapes (s)

undo_string_escapes(s) 函數會將字串 s 中的特殊字元轉換為跳脫字元,例如:

bell = "\a";

bell 是一個 alert 字元(Ctrl + g,ASCII 碼為 7),此字元在一般終端機輸出時會產生響鈴,有時候我們會需要輸出原本的跳脫字元:

undo_string_escapes (bell)

輸出為

ans = \a

這樣會將無法顯示在螢幕上的特殊字元以跳脫字元的方式顯示。