Ruby 中的 String 對(duì)象存儲(chǔ)并操作一個(gè)或多個(gè)字節(jié)的任意序列,通常表示那些代表人類(lèi)語(yǔ)言的字符。
最簡(jiǎn)單的字符串是括在單引號(hào)(單引號(hào)字符)內(nèi)。在引號(hào)標(biāo)記內(nèi)的文本是字符串的值:
'這是一個(gè) Ruby 程序的字符串'
如果您需要在單引號(hào)字符串內(nèi)使用單引號(hào)字符,那么需要在單引號(hào)字符串使用反斜杠,這樣 Ruby 解釋器就不會(huì)認(rèn)為這個(gè)單引號(hào)字符會(huì)終止字符串:
'Won\'t you read O\'Reilly\'s book?'
反斜杠也能轉(zhuǎn)義另一個(gè)反斜杠,這樣第二個(gè)反斜杠本身不會(huì)解釋為轉(zhuǎn)義字符。
以下是 Ruby 中字符串相關(guān)的特性。
在雙引號(hào)字符串中我們可以使用 #{} 井號(hào)和大括號(hào)來(lái)計(jì)算表達(dá)式的值:
字符串中嵌入變量:
#!/usr/bin/ruby # -*- coding: UTF-8 -*- name1 = "Joe" name2 = "Mary" puts "你好 #{name1}, #{name2} 在哪?"嘗試一下 ?
以上實(shí)例輸出運(yùn)行輸出結(jié)果為:
你好 Joe, Mary 在哪?
字符串中進(jìn)行數(shù)學(xué)運(yùn)算:
#!/usr/bin/ruby # -*- coding: UTF-8 -*- x, y, z = 12, 36, 72 puts "x 的值為 #{ x }" puts "x + y 的值為 #{ x + y }" puts "x + y + z 的平均值為 #{ (x + y + z)/3 }"嘗試一下 ?
以上實(shí)例輸出運(yùn)行輸出結(jié)果為:
x 的值為 12 x + y 的值為 48 x + y + z 的平均值為 40
Ruby 中還支持一種采用 %q 和 %Q 來(lái)引導(dǎo)的字符串變量,%q 使用的是單引號(hào)引用規(guī)則,而 %Q 是雙引號(hào)引用規(guī)則,后面再接一個(gè) (! [ { 等等的開(kāi)始界定符和與 } ] ) 等等的末尾界定符。
跟在q或Q后面的字符是分界符.分界符可以是任意一個(gè)非字母數(shù)字的單字節(jié)字符.如:[,{,(,<,!等,字符串會(huì)一直讀取到發(fā)現(xiàn)相匹配的結(jié)束符為止.
#!/usr/bin/ruby # -*- coding: UTF-8 -*- desc1 = %Q{Ruby 的字符串可以使用 '' 和 ""。} desc2 = %q|Ruby 的字符串可以使用 '' 和 ""。| puts desc1 puts desc2嘗試一下 ?
以上實(shí)例輸出運(yùn)行輸出結(jié)果為:
Ruby 的字符串可以使用 '' 和 ""。 Ruby 的字符串可以使用 '' 和 ""。
下標(biāo)列出了可使用反斜杠符號(hào)轉(zhuǎn)義的轉(zhuǎn)義字符或非打印字符。
注意:在一個(gè)雙引號(hào)括起的字符串內(nèi),轉(zhuǎn)義字符會(huì)被解釋?zhuān)辉谝粋€(gè)單引號(hào)括起的字符串內(nèi),轉(zhuǎn)義字符會(huì)被保留。
反斜杠符號(hào) | 十六進(jìn)制字符 | 描述 |
---|---|---|
\a | 0x07 | 報(bào)警符 |
\b | 0x08 | 退格鍵 |
\cx | Control-x | |
\C-x | Control-x | |
\e | 0x1b | 轉(zhuǎn)義符 |
\f | 0x0c | 換頁(yè)符 |
\M-\C-x | Meta-Control-x | |
\n | 0x0a | 換行符 |
\nnn | 八進(jìn)制表示法,其中 n 的范圍為 0.7 | |
\r | 0x0d | 回車(chē)符 |
\s | 0x20 | 空格符 |
\t | 0x09 | 制表符 |
\v | 0x0b | 垂直制表符 |
\x | 字符 x | |
\xnn | 十六進(jìn)制表示法,其中 n 的范圍為 0.9、 a.f 或 A.F |
Ruby 的默認(rèn)字符集是 ASCII,字符可用單個(gè)字節(jié)表示。如果您使用 UTF-8 或其他現(xiàn)代的字符集,字符可能是用一個(gè)到四個(gè)字節(jié)表示。
您可以在程序開(kāi)頭使用 $KCODE 改變字符集,如下所示:
$KCODE = 'u'
下面是 $KCODE 可能的值。
編碼 | 描述 |
---|---|
a | ASCII (與 none 相同)。這是默認(rèn)的。 |
e | EUC。 |
n | None (與 ASCII 相同)。 |
u | UTF-8。 |
我們需要有一個(gè) String 對(duì)象的實(shí)例來(lái)調(diào)用 String 方法。下面是創(chuàng)建 String 對(duì)象實(shí)例的方式:
new [String.new(str="")]
這將返回一個(gè)包含 str 副本的新的字符串對(duì)象?,F(xiàn)在,使用 str 對(duì)象,我們可以調(diào)用任意可用的實(shí)例方法。例如:
#!/usr/bin/ruby myStr = String.new("THIS IS TEST") foo = myStr.downcase puts "#{foo}"
這將產(chǎn)生以下結(jié)果:
this is test
下面是公共的字符串方法(假設(shè) str 是一個(gè) String 對(duì)象):
序號(hào) | 方法 & 描述 |
---|---|
1 | str % arg
使用格式規(guī)范格式化字符串。如果 arg 包含一個(gè)以上的替代,那么 arg 必須是一個(gè)數(shù)組。如需了解更多格式規(guī)范的信息,請(qǐng)查看"內(nèi)核模塊"下的 sprintf。 |
2 | str * integer
返回一個(gè)包含 integer 個(gè) str 的新的字符串。換句話(huà)說(shuō),str 被重復(fù)了 integer 次。 |
3 | str + other_str
連接 other_str 到 str。 |
4 | str << obj
連接一個(gè)對(duì)象到字符串。如果對(duì)象是范圍為 0.255 之間的固定數(shù)字 Fixnum,則它會(huì)被轉(zhuǎn)換為一個(gè)字符。把它與 concat 進(jìn)行比較。 |
5 | str <=> other_str
把 str 與 other_str 進(jìn)行比較,返回 -1(小于)、0(等于)或 1(大于)。比較是區(qū)分大小寫(xiě)的。 |
6 | str == obj
檢查 str 和 obj 的相等性。如果 obj 不是字符串,則返回 false,如果 str <=> obj,則返回 true,返回 0。 |
7 | str =~ obj
根據(jù)正則表達(dá)式模式 obj 匹配 str。返回匹配開(kāi)始的位置,否則返回 false。 |
8 | str =~ obj
根據(jù)正則表達(dá)式模式 obj 匹配 str。返回匹配開(kāi)始的位置,否則返回 false。 |
9 | str.capitalize
把字符串轉(zhuǎn)換為大寫(xiě)字母顯示。 |
10 | str.capitalize!
與 capitalize 相同,但是 str 會(huì)發(fā)生變化并返回。 |
11 | str.casecmp
不區(qū)分大小寫(xiě)的字符串比較。 |
12 | str.center
居中字符串。 |
13 | str.chomp
從字符串末尾移除記錄分隔符($/),通常是 \n。如果沒(méi)有記錄分隔符,則不進(jìn)行任何操作。 |
14 | str.chomp!
與 chomp 相同,但是 str 會(huì)發(fā)生變化并返回。 |
15 | str.chop
移除 str 中的最后一個(gè)字符。 |
16 | str.chop!
與 chop 相同,但是 str 會(huì)發(fā)生變化并返回。 |
17 | str.concat(other_str)
連接 other_str 到 str。 |
18 | str.count(str, ...)
給一個(gè)或多個(gè)字符集計(jì)數(shù)。如果有多個(gè)字符集,則給這些集合的交集計(jì)數(shù)。 |
19 | str.crypt(other_str)
對(duì) str 應(yīng)用單向加密哈希。參數(shù)是兩個(gè)字符長(zhǎng)的字符串,每個(gè)字符的范圍為 a.z、 A.Z、 0.9、 . 或 /。 |
20 | str.delete(other_str, ...)
返回 str 的副本,參數(shù)交集中的所有字符會(huì)被刪除。 |
21 | str.delete!(other_str, ...)
與 delete 相同,但是 str 會(huì)發(fā)生變化并返回。 |
22 | str.downcase
返回 str 的副本,所有的大寫(xiě)字母會(huì)被替換為小寫(xiě)字母。 |
23 | str.downcase!
與 downcase 相同,但是 str 會(huì)發(fā)生變化并返回。 |
24 | str.dump
返回 str 的版本,所有的非打印字符被替換為 \nnn 符號(hào),所有的特殊字符被轉(zhuǎn)義。 |
25 | str.each(separator=$/) { |substr| block }
使用參數(shù)作為記錄分隔符(默認(rèn)是 $/)分隔 str,傳遞每個(gè)子字符串給被提供的塊。 |
26 | str.each_byte { |fixnum| block }
傳遞 str 的每個(gè)字節(jié)給 block,以字節(jié)的十進(jìn)制表示法返回每個(gè)字節(jié)。 |
27 | str.each_line(separator=$/) { |substr| block }
使用參數(shù)作為記錄分隔符(默認(rèn)是 $/)分隔 str,傳遞每個(gè)子字符串給被提供的 block。 |
28 | str.empty?
如果 str 為空(即長(zhǎng)度為 0),則返回 true。 |
29 | str.eql?(other)
如果兩個(gè)字符串有先攻的長(zhǎng)度和內(nèi)容,則這兩個(gè)字符串相等。 |
30 | str.gsub(pattern, replacement) [or] str.gsub(pattern) { |match| block } 返回 str 的副本,pattern 的所有出現(xiàn)都替換為 replacement 或 block 的值。pattern 通常是一個(gè)正則表達(dá)式 Regexp;如果是一個(gè)字符串 String,則沒(méi)有正則表達(dá)式元字符被解釋?zhuān)矗?\d/ 將匹配一個(gè)數(shù)字,但 '\d' 將匹配一個(gè)反斜杠后跟一個(gè) 'd')。 |
31 | str[fixnum] [or] str[fixnum,fixnum] [or] str[range] [or] str[regexp] [or] str[regexp, fixnum] [or] str[other_str]
使用下列的參數(shù)引用 str:參數(shù)為一個(gè) Fixnum,則返回 fixnum 的字符編碼;參數(shù)為兩個(gè) Fixnum,則返回一個(gè)從偏移(第一個(gè) fixnum)開(kāi)始截至到長(zhǎng)度(第二個(gè) fixnum)為止的子字符串;參數(shù)為 range,則返回該范圍內(nèi)的一個(gè)子字符串;參數(shù)為 regexp,則返回匹配字符串的部分;參數(shù)為帶有 fixnum 的 regexp,則返回 fixnum 位置的匹配數(shù)據(jù);參數(shù)為 other_str,則返回匹配 other_str 的子字符串。一個(gè)負(fù)數(shù)的 Fixnum 從字符串的末尾 -1 開(kāi)始。 |
32 | str[fixnum] = fixnum [or] str[fixnum] = new_str [or] str[fixnum, fixnum] = new_str [or] str[range] = aString [or] str[regexp] =new_str [or] str[regexp, fixnum] =new_str [or] str[other_str] = new_str ]
替換整個(gè)字符串或部分字符串。與 slice! 同義。 |
33 | str.gsub!(pattern, replacement) [or] str.gsub!(pattern) { |match| block }
執(zhí)行 String#gsub 的替換,返回 str,如果沒(méi)有替換被執(zhí)行則返回 nil。 |
34 | str.hash
返回一個(gè)基于字符串長(zhǎng)度和內(nèi)容的哈希。 |
35 | str.hex
把 str 的前導(dǎo)字符當(dāng)作十六進(jìn)制數(shù)字的字符串(一個(gè)可選的符號(hào)和一個(gè)可選的 0x),并返回相對(duì)應(yīng)的數(shù)字。如果錯(cuò)誤則返回零。 |
36 | str.include? other_str [or] str.include? fixnum
如果 str 包含給定的字符串或字符,則返回 true。 |
37 | str.index(substring [, offset]) [or] str.index(fixnum [, offset]) [or] str.index(regexp [, offset]) 返回給定子字符串、字符(fixnum)或模式(regexp)在 str 中第一次出現(xiàn)的索引。如果未找到則返回 nil。如果提供了第二個(gè)參數(shù),則指定在字符串中開(kāi)始搜索的位置。 |
38 | str.insert(index, other_str)
在給定索引的字符前插入 other_str,修改 str。負(fù)值索引從字符串的末尾開(kāi)始計(jì)數(shù),并在給定字符后插入。其意圖是在給定的索引處開(kāi)始插入一個(gè)字符串。 |
39 | str.inspect
返回 str 的可打印版本,帶有轉(zhuǎn)義的特殊字符。 |
40 | str.intern [or] str.to_sym
返回與 str 相對(duì)應(yīng)的符號(hào),如果之前不存在,則創(chuàng)建符號(hào)。 |
41 | str.length
返回 str 的長(zhǎng)度。把它與 size 進(jìn)行比較。 |
42 | str.ljust(integer, padstr=' ')
如果 integer 大于 str 的長(zhǎng)度,則返回長(zhǎng)度為 integer 的新字符串,新字符串以 str 左對(duì)齊,并以 padstr 作為填充。否則,返回 str。 |
43 | str.lstrip
返回 str 的副本,移除了前導(dǎo)的空格。 |
44 | str.lstrip!
從 str 中移除前導(dǎo)的空格,如果沒(méi)有變化則返回 nil。 |
45 | str.match(pattern)
如果 pattern 不是正則表達(dá)是,則把 pattern 轉(zhuǎn)換為正則表達(dá)式 Regexp,然后在 str 上調(diào)用它的匹配方法。 |
46 | str.oct
把 str 的前導(dǎo)字符當(dāng)作十進(jìn)制數(shù)字的字符串(一個(gè)可選的符號(hào)),并返回相對(duì)應(yīng)的數(shù)字。如果轉(zhuǎn)換失敗,則返回 0。 |
47 | str.replace(other_str)
把 str 中的內(nèi)容替換為 other_str 中的相對(duì)應(yīng)的值。 |
48 | str.reverse
返回一個(gè)新字符串,新字符串是 str 的倒序。 |
49 | str.reverse!
逆轉(zhuǎn) str,str 會(huì)發(fā)生變化并返回。 |
50 | str.rindex(substring [, fixnum]) [or] str.rindex(fixnum [, fixnum]) [or] str.rindex(regexp [, fixnum]) 返回給定子字符串、字符(fixnum)或模式(regexp)在 str 中最后一次出現(xiàn)的索引。如果未找到則返回 nil。如果提供了第二個(gè)參數(shù),則指定在字符串中結(jié)束搜索的位置。超出該點(diǎn)的字符將不被考慮。 |
51 | str.rjust(integer, padstr=' ')
如果 integer 大于 str 的長(zhǎng)度,則返回長(zhǎng)度為 integer 的新字符串,新字符串以 str 右對(duì)齊,并以 padstr 作為填充。否則,返回 str。 |
52 | str.rstrip
返回 str 的副本,移除了尾隨的空格。 |
53 | str.rstrip!
從 str 中移除尾隨的空格,如果沒(méi)有變化則返回 nil。 |
54 | str.scan(pattern) [or] str.scan(pattern) { |match, ...| block } 兩種形式匹配 pattern(可以是一個(gè)正則表達(dá)式 Regexp 或一個(gè)字符串 String)遍歷 str。針對(duì)每個(gè)匹配,會(huì)生成一個(gè)結(jié)果,結(jié)果會(huì)添加到結(jié)果數(shù)組中或傳遞給 block。如果 pattern 不包含分組,則每個(gè)獨(dú)立的結(jié)果由匹配的字符串、$& 組成。如果 pattern 包含分組,每個(gè)獨(dú)立的結(jié)果是一個(gè)包含每個(gè)分組入口的數(shù)組。 |
55 | str.slice(fixnum) [or] str.slice(fixnum, fixnum) [or] str.slice(range) [or] str.slice(regexp) [or] str.slice(regexp, fixnum) [or] str.slice(other_str) See str[fixnum], etc. str.slice!(fixnum) [or] str.slice!(fixnum, fixnum) [or] str.slice!(range) [or] str.slice!(regexp) [or] str.slice!(other_str) 從 str 中刪除指定的部分,并返回刪除的部分。如果值超出范圍,參數(shù)帶有 Fixnum 的形式,將生成一個(gè) IndexError。參數(shù)為 range 的形式,將生成一個(gè) RangeError,參數(shù)為 Regexp 和 String 的形式,將忽略執(zhí)行動(dòng)作。 |
56 | str.split(pattern=$;, [limit])
基于分隔符,把 str 分成子字符串,并返回這些子字符串的數(shù)組。 如果 pattern 是一個(gè)字符串 String,那么在分割 str 時(shí),它將作為分隔符使用。如果 pattern 是一個(gè)單一的空格,那么 str 是基于空格進(jìn)行分割,會(huì)忽略前導(dǎo)空格和連續(xù)空格字符。 如果 pattern 是一個(gè)正則表達(dá)式 Regexp,則 str 在 pattern 匹配的地方被分割。當(dāng) pattern 匹配一個(gè)玲長(zhǎng)度的字符串時(shí),str 被分割成單個(gè)字符。 如果省略了 pattern 參數(shù),則使用 $; 的值。如果 $; 為 nil(默認(rèn)的),str 基于空格進(jìn)行分割,就像是指定了 ` ` 作為分隔符一樣。 如果省略了 limit 參數(shù),會(huì)抑制尾隨的 null 字段。如果 limit 是一個(gè)正數(shù),則最多返回該數(shù)量的字段(如果 limit 為 1,則返回整個(gè)字符串作為數(shù)組中的唯一入口)。如果 limit 是一個(gè)負(fù)數(shù),則返回的字段數(shù)量不限制,且不抑制尾隨的 null 字段。 |
57 | str.squeeze([other_str]*)
使用為 String#count 描述的程序從 other_str 參數(shù)建立一系列字符。返回一個(gè)新的字符串,其中集合中出現(xiàn)的相同的字符會(huì)被替換為單個(gè)字符。如果沒(méi)有給出參數(shù),則所有相同的字符都被替換為單個(gè)字符。 |
58 | str.squeeze!([other_str]*)
與 squeeze 相同,但是 str 會(huì)發(fā)生變化并返回,如果沒(méi)有變化則返回 nil。 |
59 | str.strip
返回 str 的副本,移除了前導(dǎo)的空格和尾隨的空格。 |
60 | str.strip!
從 str 中移除前導(dǎo)的空格和尾隨的空格,如果沒(méi)有變化則返回 nil。 |
61 | str.sub(pattern, replacement) [or] str.sub(pattern) { |match| block } 返回 str 的副本,pattern 的第一次出現(xiàn)會(huì)被替換為 replacement 或 block 的值。pattern 通常是一個(gè)正則表達(dá)式 Regexp;如果是一個(gè)字符串 String,則沒(méi)有正則表達(dá)式元字符被解釋。 |
62 | str.sub!(pattern, replacement) [or] str.sub!(pattern) { |match| block } 執(zhí)行 String#sub 替換,并返回 str,如果沒(méi)有替換執(zhí)行,則返回 nil。 |
63 | str.succ [or] str.next
返回 str 的繼承。 |
64 | str.succ! [or] str.next!
相當(dāng)于 String#succ,但是 str 會(huì)發(fā)生變化并返回。 |
65 | str.sum(n=16)
返回 str 中字符的 n-bit 校驗(yàn)和,其中 n 是可選的 Fixnum 參數(shù),默認(rèn)為 16。結(jié)果是簡(jiǎn)單地把 str 中每個(gè)字符的二進(jìn)制值的總和,以 2n - 1 為模。這不是一個(gè)特別好的校驗(yàn)和。 |
66 | str.swapcase
返回 str 的副本,所有的大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母,所有的小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母。 |
67 | str.swapcase!
相當(dāng)于 String#swapcase,但是 str 會(huì)發(fā)生變化并返回,如果沒(méi)有變化則返回 nil。 |
68 | str.to_f
返回把 str 中的前導(dǎo)字符解釋為浮點(diǎn)數(shù)的結(jié)果。超出有效數(shù)字的末尾的多余字符會(huì)被忽略。如果在 str 的開(kāi)頭沒(méi)有有效數(shù)字,則返回 0.0。該方法不會(huì)生成異常。 |
69 | str.to_i(base=10)
返回把 str 中的前導(dǎo)字符解釋為整數(shù)基數(shù)(基數(shù)為 2、 8、 10 或 16)的結(jié)果。超出有效數(shù)字的末尾的多余字符會(huì)被忽略。如果在 str 的開(kāi)頭沒(méi)有有效數(shù)字,則返回 0。該方法不會(huì)生成異常。 |
70 | str.to_s [or] str.to_str
返回接收的值。 |
71 | str.tr(from_str, to_str)
返回 str 的副本,把 from_str 中的字符替換為 to_str 中相對(duì)應(yīng)的字符。如果 to_str 比 from_str 短,那么它會(huì)以最后一個(gè)字符進(jìn)行填充。兩個(gè)字符串都可以使用 c1.c2 符號(hào)表示字符的范圍。如果 from_str 以 ^ 開(kāi)頭,則表示除了所列出的字符以外的所有字符。 |
72 | str.tr!(from_str, to_str)
相當(dāng)于 String#tr,但是 str 會(huì)發(fā)生變化并返回,如果沒(méi)有變化則返回 nil。 |
73 | str.tr_s(from_str, to_str)
把 str 按照 String#tr 描述的規(guī)則進(jìn)行處理,然后移除會(huì)影響翻譯的重復(fù)字符。 |
74 | str.tr_s!(from_str, to_str)
相當(dāng)于 String#tr_s,但是 str 會(huì)發(fā)生變化并返回,如果沒(méi)有變化則返回 nil。 |
75 | str.unpack(format)
根據(jù) format 字符串解碼 str(可能包含二進(jìn)制數(shù)據(jù)),返回被提取的每個(gè)值的數(shù)組。format 字符由一系列單字符指令組成。每個(gè)指令后可以跟著一個(gè)數(shù)字,表示重復(fù)該指令的次數(shù)。星號(hào)(*)將使用所有剩余的元素。指令 sSiIlL 每個(gè)后可能都跟著一個(gè)下劃線(xiàn)(_),為指定類(lèi)型使用底層平臺(tái)的本地尺寸大小,否則使用獨(dú)立于平臺(tái)的一致的尺寸大小。format 字符串中的空格會(huì)被忽略。 |
76 | str.upcase
返回 str 的副本,所有的小寫(xiě)字母會(huì)被替換為大寫(xiě)字母。操作是環(huán)境不敏感的,只有字符 a 到 z 會(huì)受影響。 |
77 | str.upcase!
改變 str 的內(nèi)容為大寫(xiě),如果沒(méi)有變化則返回 nil。 |
78 | str.upto(other_str) { |s| block }
遍歷連續(xù)值,以 str 開(kāi)始,以 other_str 結(jié)束(包含),輪流傳遞每個(gè)值給 block。String#succ 方法用于生成每個(gè)值。 |
下表列出了方法 String#unpack 的解壓指令。
指令 | 返回 | 描述 |
---|---|---|
A | String | 移除尾隨的 null 和空格。 |
a | String | 字符串。 |
B | String | 從每個(gè)字符中提取位(首先是最高有效位)。 |
b | String | 從每個(gè)字符中提取位(首先是最低有效位)。 |
C | Fixnum | 提取一個(gè)字符作為無(wú)符號(hào)整數(shù)。 |
c | Fixnum | 提取一個(gè)字符作為整數(shù)。 |
D, d | Float | 把 sizeof(double) 長(zhǎng)度的字符當(dāng)作原生的 double。 |
E | Float | 把 sizeof(double) 長(zhǎng)度的字符當(dāng)作 littleendian 字節(jié)順序的 double。 |
e | Float | 把 sizeof(float) 長(zhǎng)度的字符當(dāng)作 littleendian 字節(jié)順序的 float。 |
F, f | Float | 把 sizeof(float) 長(zhǎng)度的字符當(dāng)作原生的 float。 |
G | Float | 把 sizeof(double) 長(zhǎng)度的字符當(dāng)作 network 字節(jié)順序的 double。 |
g | Float | 把 sizeof(float) 長(zhǎng)度的字符當(dāng)作 network 字節(jié)順序的 float。 |
H | String | 從每個(gè)字符中提取十六進(jìn)制(首先是最高有效位)。 |
h | String | 從每個(gè)字符中提取十六進(jìn)制(首先是最低有效位)。 |
I | Integer | 把 sizeof(int) 長(zhǎng)度(通過(guò) _ 修改)的連續(xù)字符當(dāng)作原生的 integer。 |
i | Integer | 把 sizeof(int) 長(zhǎng)度(通過(guò) _ 修改)的連續(xù)字符當(dāng)作有符號(hào)的原生的 integer。 |
L | Integer | 把四個(gè)(通過(guò) _ 修改)連續(xù)字符當(dāng)作無(wú)符號(hào)的原生的 long integer。 |
l | Integer | 把四個(gè)(通過(guò) _ 修改)連續(xù)字符當(dāng)作有符號(hào)的原生的 long integer。 |
M | String | 引用可打印的。 |
m | String | Base64 編碼。 |
N | Integer | 把四個(gè)字符當(dāng)作 network 字節(jié)順序的無(wú)符號(hào)的 long。 |
n | Fixnum | 把兩個(gè)字符當(dāng)作 network 字節(jié)順序的無(wú)符號(hào)的 short。 |
P | String | 把 sizeof(char *) 長(zhǎng)度的字符當(dāng)作指針,并從引用的位置返回 \emph{len} 字符。 |
p | String | 把 sizeof(char *) 長(zhǎng)度的字符當(dāng)作一個(gè)空結(jié)束字符的指針。 |
Q | Integer | 把八個(gè)字符當(dāng)作無(wú)符號(hào)的 quad word(64 位)。 |
q | Integer | 把八個(gè)字符當(dāng)作有符號(hào)的 quad word(64 位)。 |
S | Fixnum | 把兩個(gè)(如果使用 _ 則不同)連續(xù)字符當(dāng)作 native 字節(jié)順序的無(wú)符號(hào)的 short。 |
s | Fixnum | 把兩個(gè)(如果使用 _ 則不同)連續(xù)字符當(dāng)作 native 字節(jié)順序的有符號(hào)的 short。 |
U | Integer | UTF-8 字符,作為無(wú)符號(hào)整數(shù)。 |
u | String | UU 編碼。 |
V | Fixnum | 把四個(gè)字符當(dāng)作 little-endian 字節(jié)順序的無(wú)符號(hào)的 long。 |
v | Fixnum | 把兩個(gè)字符當(dāng)作 little-endian 字節(jié)順序的無(wú)符號(hào)的 short。 |
w | Integer | BER 壓縮的整數(shù)。 |
X | 向后跳過(guò)一個(gè)字符。 | |
x | 向前跳過(guò)一個(gè)字符。 | |
Z | String | 和 * 一起使用,移除尾隨的 null 直到第一個(gè) null。 |
@ | 跳過(guò) length 參數(shù)給定的偏移量。 |
嘗試下面的實(shí)例,解壓各種數(shù)據(jù)。
"abc abc ".unpack('A6Z6') #=> ["abc", "abc "] "abc ".unpack('a3a3') #=> ["abc", " 0000"] "abc abc ".unpack('Z*Z*') #=> ["abc ", "abc "] "aa".unpack('b8B8') #=> ["10000110", "01100001"] "aaa".unpack('h2H2c') #=> ["16", "61", 97] "\xfe\xff\xfe\xff".unpack('sS') #=> [-2, 65534] "now=20is".unpack('M*') #=> ["now is"] "whole".unpack('xax2aX2aX1aX2a') #=> ["h", "e", "l", "l", "o"]
更多建議: