鍍金池/ 教程/ Ruby/ Ruby 字符串
Ruby 方法
Ruby 語(yǔ)法
Ruby 注釋
Ruby 簡(jiǎn)介
Ruby 數(shù)據(jù)庫(kù)訪(fǎng)問(wèn) - DBI 教程
Ruby 安裝 - Unix
Ruby 數(shù)據(jù)類(lèi)型
Ruby 異常
Ruby 類(lèi)案例
Ruby 命令行選項(xiàng)
Ruby CGI Sessions
Ruby 類(lèi)和對(duì)象
Ruby 環(huán)境
Ruby 面向?qū)ο?/span>
Ruby 變量
Ruby Dir 類(lèi)和方法
Ruby CGI方法
Ruby 塊
Ruby JSON
Ruby File 類(lèi)和方法
Ruby 安裝 - Windows
Ruby 判斷
Ruby CGI編程
Ruby 發(fā)送郵件 – SMTP
Ruby XML, XSLT 和 XPath 教程
Ruby 迭代器
Ruby 數(shù)組
Ruby 模塊
Ruby 正則表達(dá)式
Ruby CGI Cookies
Ruby Web Services 應(yīng)用 - SOAP4R
Ruby 循環(huán)
Ruby 多線(xiàn)程
Ruby Socket 編程
Ruby 環(huán)境變量
Ruby 日期 & 時(shí)間
Ruby 范圍
Ruby 字符串
Ruby 哈希(Hash)
Ruby 運(yùn)算符
Ruby 文件的輸入與輸出

Ruby 字符串

Ruby 中的 String 對(duì)象存儲(chǔ)并操作一個(gè)或多個(gè)字節(jié)的任意序列,通常表示那些代表人類(lèi)語(yǔ)言的字符。

最簡(jiǎn)單的字符串是括在單引號(hào)(單引號(hào)字符)內(nèi)。在引號(hào)標(biāo)記內(nèi)的文本是字符串的值:

'This is a simple Ruby string literal'

如果您需要在單引號(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)的特性。

表達(dá)式置換

表達(dá)式置換是一種使用 #{ 和 } 把任意 Ruby 表達(dá)式的值嵌入到字符串中的方式:

#!/usr/bin/ruby

x, y, z = 12, 36, 72
puts "The value of x is #{ x }."
puts "The sum of x and y is #{ x + y }."
puts "The average was #{ (x + y + z)/3 }."

這將產(chǎn)生以下結(jié)果:

The value of x is 12.
The sum of x and y is 48.
The average was 40.

一般的分隔字符串

通過(guò)一般的分隔字符串,您可以在以百分號(hào)字符(%)為前導(dǎo)的一對(duì)匹配的任意分隔字符(例如,!、 (、 {、 <,等等)內(nèi)創(chuàng)建字符串。Q、 q 和 x 有特殊的意義。一般的分隔字符串可以是:

%{Ruby is fun.}  相當(dāng)于 "Ruby is fun."
%Q{ Ruby is fun. } 相當(dāng)于 " Ruby is fun. "
%q[Ruby is fun.]  相當(dāng)于以單引號(hào)字符串
%x!ls! 相當(dāng)于反勾號(hào)命令輸出 `ls`

轉(zhuǎn)義字符

下標(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)制字符描述
\a0x07報(bào)警符
\b0x08退格鍵
\cx Control-x
\C-x Control-x
\e0x1b轉(zhuǎn)義符
\f0x0c換頁(yè)符
\M-\C-x Meta-Control-x
\n0x0a換行符
\nnn 八進(jìn)制表示法,其中 n 的范圍為 0.7
\r0x0d回車(chē)符
\s0x20空格符
\t0x09制表符
\v0x0b垂直制表符
\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' </pre>

下面是 $KCODE 可能的值。

編碼描述
aASCII (與 none 相同)。這是默認(rèn)的。
eEUC。
nNone (與 ASCII 相同)。
uUTF-8。

字符串內(nèi)建方法

我們需要有一個(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)方法 & 描述
1str % arg
使用格式規(guī)范格式化字符串。如果 arg 包含一個(gè)以上的替代,那么 arg 必須是一個(gè)數(shù)組。如需了解更多格式規(guī)范的信息,請(qǐng)查看"內(nèi)核模塊"下的 sprintf。
2str integer
返回一個(gè)包含 integer 個(gè) str 的新的字符串。換句話(huà)說(shuō),str 被重復(fù)了 integer 次。
3str + other_str
連接 other_str 到 str。
4str << obj
連接一個(gè)對(duì)象到字符串。如果對(duì)象是范圍為 0.255 之間的固定數(shù)字 Fixnum,則它會(huì)被轉(zhuǎn)換為一個(gè)字符。把它與 concat 進(jìn)行比較。
5str <=> other_str
把 str 與 other_str 進(jìn)行比較,返回 -1(小于)、0(等于)或 1(大于)。比較是區(qū)分大小寫(xiě)的。
6str == obj
檢查 str 和 obj 的相等性。如果 obj 不是字符串,則返回 false,如果 str <=> obj,則返回 true,返回 0。
7str =~ obj
根據(jù)正則表達(dá)式模式 obj 匹配 str。返回匹配開(kāi)始的位置,否則返回 false。
8str =~ obj
根據(jù)正則表達(dá)式模式 obj 匹配 str。返回匹配開(kāi)始的位置,否則返回 false。
9str.capitalize
把字符串轉(zhuǎn)換為大寫(xiě)字母顯示。
10str.capitalize!
與 capitalize 相同,但是 str 會(huì)發(fā)生變化并返回。
11str.casecmp
不區(qū)分大小寫(xiě)的字符串比較。
12str.center
居中字符串。
13str.chomp
從字符串末尾移除記錄分隔符($/),通常是 \n。如果沒(méi)有記錄分隔符,則不進(jìn)行任何操作。
14str.chomp!
與 chomp 相同,但是 str 會(huì)發(fā)生變化并返回。
15str.chop
移除 str 中的最后一個(gè)字符。
16str.chop!
與 chop 相同,但是 str 會(huì)發(fā)生變化并返回。
17str.concat(other_str)
連接 other_str 到 str。
18str.count(str, ...)
給一個(gè)或多個(gè)字符集計(jì)數(shù)。如果有多個(gè)字符集,則給這些集合的交集計(jì)數(shù)。
19str.crypt(other_str)
對(duì) str 應(yīng)用單向加密哈希。參數(shù)是兩個(gè)字符長(zhǎng)的字符串,每個(gè)字符的范圍為 a.z、 A.Z、 0.9、 . 或 /。
20str.delete(other_str, ...)
返回 str 的副本,參數(shù)交集中的所有字符會(huì)被刪除。
21str.delete!(other_str, ...)
與 delete 相同,但是 str 會(huì)發(fā)生變化并返回。
22str.downcase
返回 str 的副本,所有的大寫(xiě)字母會(huì)被替換為小寫(xiě)字母。
23str.downcase!
與 downcase 相同,但是 str 會(huì)發(fā)生變化并返回。
24str.dump
返回 str 的版本,所有的非打印字符被替換為 \nnn 符號(hào),所有的特殊字符被轉(zhuǎn)義。
25str.each(separator=$/) { |substr| block }
使用參數(shù)作為記錄分隔符(默認(rèn)是 $/)分隔 str,傳遞每個(gè)子字符串給被提供的塊。
26str.each_byte { |fixnum| block }
傳遞 str 的每個(gè)字節(jié)給 block,以字節(jié)的十進(jìn)制表示法返回每個(gè)字節(jié)。
27str.each_line(separator=$/) { |substr| block }
使用參數(shù)作為記錄分隔符(默認(rèn)是 $/)分隔 str,傳遞每個(gè)子字符串給被提供的 block。
28str.empty?
如果 str 為空(即長(zhǎng)度為 0),則返回 true。
29str.eql?(other)
如果兩個(gè)字符串有先攻的長(zhǎng)度和內(nèi)容,則這兩個(gè)字符串相等。
30str.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')。
31str[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)始。
32str[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! 同義。
33str.gsub!(pattern, replacement) [or] str.gsub!(pattern) { |match| block }
執(zhí)行 String#gsub 的替換,返回 str,如果沒(méi)有替換被執(zhí)行則返回 nil。
34str.hash
返回一個(gè)基于字符串長(zhǎng)度和內(nèi)容的哈希。
35str.hex
把 str 的前導(dǎo)字符當(dāng)作十六進(jìn)制數(shù)字的字符串(一個(gè)可選的符號(hào)和一個(gè)可選的 0x),并返回相對(duì)應(yīng)的數(shù)字。如果錯(cuò)誤則返回零。
36str.include? other_str [or] str.include? fixnum
如果 str 包含給定的字符串或字符,則返回 true。
37str.index(substring [, offset]) [or]
str.index(fixnum [, offset]) [or]
str.index(regexp [, offset])

返回給定子字符串、字符(fixnum)或模式(regexp)在 str 中第一次出現(xiàn)的索引。如果未找到則返回 nil。如果提供了第二個(gè)參數(shù),則指定在字符串中開(kāi)始搜索的位置。
38str.insert(index, other_str)
在給定索引的字符前插入 other_str,修改 str。負(fù)值索引從字符串的末尾開(kāi)始計(jì)數(shù),并在給定字符后插入。其意圖是在給定的索引處開(kāi)始插入一個(gè)字符串。
39str.inspect
返回 str 的可打印版本,帶有轉(zhuǎn)義的特殊字符。
40str.intern [or] str.to_sym
返回與 str 相對(duì)應(yīng)的符號(hào),如果之前不存在,則創(chuàng)建符號(hào)。
41str.length
返回 str 的長(zhǎng)度。把它與 size 進(jìn)行比較。
42str.ljust(integer, padstr=' ')
如果 integer 大于 str 的長(zhǎng)度,則返回長(zhǎng)度為 integer 的新字符串,新字符串以 str 左對(duì)齊,并以 padstr 作為填充。否則,返回 str。
43str.lstrip
返回 str 的副本,移除了前導(dǎo)的空格。
44str.lstrip!
從 str 中移除前導(dǎo)的空格,如果沒(méi)有變化則返回 nil。
45str.match(pattern)
如果 pattern 不是正則表達(dá)是,則把 pattern 轉(zhuǎn)換為正則表達(dá)式 Regexp,然后在 str 上調(diào)用它的匹配方法。
46str.oct
把 str 的前導(dǎo)字符當(dāng)作十進(jìn)制數(shù)字的字符串(一個(gè)可選的符號(hào)),并返回相對(duì)應(yīng)的數(shù)字。如果轉(zhuǎn)換失敗,則返回 0。
47str.replace(other_str)
把 str 中的內(nèi)容替換為 other_str 中的相對(duì)應(yīng)的值。
48str.reverse
返回一個(gè)新字符串,新字符串是 str 的倒序。
49str.reverse!
逆轉(zhuǎn) str,str 會(huì)發(fā)生變化并返回。
50str.rindex(substring [, fixnum]) [or]
str.rindex(fixnum [, fixnum]) [or]
str.rindex(regexp [, fixnum])

返回給定子字符串、字符(fixnum)或模式(regexp)在 str 中最后一次出現(xiàn)的索引。如果未找到則返回 nil。如果提供了第二個(gè)參數(shù),則指定在字符串中結(jié)束搜索的位置。超出該點(diǎn)的字符將不被考慮。
51str.rjust(integer, padstr=' ')
如果 integer 大于 str 的長(zhǎng)度,則返回長(zhǎng)度為 integer 的新字符串,新字符串以 str 右對(duì)齊,并以 padstr 作為填充。否則,返回 str。
52str.rstrip
返回 str 的副本,移除了尾隨的空格。
53str.rstrip!
從 str 中移除尾隨的空格,如果沒(méi)有變化則返回 nil。
54str.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ù)組。
55str.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)作。
56str.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 字段。

57str.squeeze([other_str])
使用為 String#count 描述的程序從 other_str 參數(shù)建立一系列字符。返回一個(gè)新的字符串,其中集合中出現(xiàn)的相同的字符會(huì)被替換為單個(gè)字符。如果沒(méi)有給出參數(shù),則所有相同的字符都被替換為單個(gè)字符。
58str.squeeze!([other_str])
與 squeeze 相同,但是 str 會(huì)發(fā)生變化并返回,如果沒(méi)有變化則返回 nil。
59str.strip
返回 str 的副本,移除了前導(dǎo)的空格和尾隨的空格。
60str.strip!
從 str 中移除前導(dǎo)的空格和尾隨的空格,如果沒(méi)有變化則返回 nil。
61str.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á)式元字符被解釋。
62str.sub!(pattern, replacement) [or]
str.sub!(pattern) { |match| block }

執(zhí)行 String#sub 替換,并返回 str,如果沒(méi)有替換執(zhí)行,則返回 nil。
63str.succ [or] str.next
返回 str 的繼承。
64str.succ! [or] str.next!
相當(dāng)于 String#succ,但是 str 會(huì)發(fā)生變化并返回。
65str.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)和。
66str.swapcase
返回 str 的副本,所有的大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母,所有的小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母。
67str.swapcase!
相當(dāng)于 String#swapcase,但是 str 會(huì)發(fā)生變化并返回,如果沒(méi)有變化則返回 nil。
68str.to_f
返回把 str 中的前導(dǎo)字符解釋為浮點(diǎn)數(shù)的結(jié)果。超出有效數(shù)字的末尾的多余字符會(huì)被忽略。如果在 str 的開(kāi)頭沒(méi)有有效數(shù)字,則返回 0.0。該方法不會(huì)生成異常。
69str.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ì)生成異常。
70str.to_s [or] str.to_str
返回接收的值。
71str.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)頭,則表示除了所列出的字符以外的所有字符。
72str.tr!(from_str, to_str)
相當(dāng)于 String#tr,但是 str 會(huì)發(fā)生變化并返回,如果沒(méi)有變化則返回 nil。
73str.tr_s(from_str, to_str)
把 str 按照 String#tr 描述的規(guī)則進(jìn)行處理,然后移除會(huì)影響翻譯的重復(fù)字符。
74str.tr_s!(from_str, to_str)
相當(dāng)于 String#tr_s,但是 str 會(huì)發(fā)生變化并返回,如果沒(méi)有變化則返回 nil。
75str.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ì)被忽略。
76str.upcase
返回 str 的副本,所有的小寫(xiě)字母會(huì)被替換為大寫(xiě)字母。操作是環(huán)境不敏感的,只有字符 a 到 z 會(huì)受影響。
77str.upcase!
改變 str 的內(nèi)容為大寫(xiě),如果沒(méi)有變化則返回 nil。
78str.upto(other_str) { |s| block }
遍歷連續(xù)值,以 str 開(kāi)始,以 other_str 結(jié)束(包含),輪流傳遞每個(gè)值給 block。String#succ 方法用于生成每個(gè)值。

字符串 unpack 指令

下表列出了方法 String#unpack 的解壓指令。

tr>
指令返回描述
AString移除尾隨的 null 和空格。
aString字符串。
BString從每個(gè)字符中提取位(首先是最高有效位)。
bString從每個(gè)字符中提取位(首先是最低有效位)。
CFixnum提取一個(gè)字符作為無(wú)符號(hào)整數(shù)。
cFixnum提取一個(gè)字符作為整數(shù)。
D, dFloat把 sizeof(double) 長(zhǎng)度的字符當(dāng)作原生的 double。
EFloat把 sizeof(double) 長(zhǎng)度的字符當(dāng)作 littleendian 字節(jié)順序的 double。
eFloat把 sizeof(float) 長(zhǎng)度的字符當(dāng)作 littleendian 字節(jié)順序的 float。
F, fFloat把 sizeof(float) 長(zhǎng)度的字符當(dāng)作原生的 float。
GFloat把 sizeof(double) 長(zhǎng)度的字符當(dāng)作 network 字節(jié)順序的 double。
gFloat把 sizeof(float) 長(zhǎng)度的字符當(dāng)作 network 字節(jié)順序的 float。
HString從每個(gè)字符中提取十六進(jìn)制(首先是最高有效位)。
hString從每個(gè)字符中提取十六進(jìn)制(首先是最低有效位)。
IInteger把 sizeof(int) 長(zhǎng)度(通過(guò) 修改)的連續(xù)字符當(dāng)作原生的 integer。
iInteger把 sizeof(int) 長(zhǎng)度(通過(guò) 修改)的連續(xù)字符當(dāng)作有符號(hào)的原生的 integer。
LInteger把四個(gè)(通過(guò) 修改)連續(xù)字符當(dāng)作無(wú)符號(hào)的原生的 long integer。
lInteger把四個(gè)(通過(guò) 修改)連續(xù)字符當(dāng)作有符號(hào)的原生的 long integer。
MString引用可打印的。
mStringBase64 編碼。
NInteger把四個(gè)字符當(dāng)作 network 字節(jié)順序的無(wú)符號(hào)的 long。
nFixnum把兩個(gè)字符當(dāng)作 network 字節(jié)順序的無(wú)符號(hào)的 short。
PString把 sizeof(char ) 長(zhǎng)度的字符當(dāng)作指針,并從引用的位置返回 \emph 字符。
pString把 sizeof(char ) 長(zhǎng)度的字符當(dāng)作一個(gè)空結(jié)束字符的指針。
QInteger把八個(gè)字符當(dāng)作無(wú)符號(hào)的 quad word(64 位)。
qInteger把八個(gè)字符當(dāng)作有符號(hào)的 quad word(64 位)。
SFixnum把兩個(gè)(如果使用 則不同)連續(xù)字符當(dāng)作 native 字節(jié)順序的無(wú)符號(hào)的 short。
sFixnum把兩個(gè)(如果使用 則不同)連續(xù)字符當(dāng)作 native 字節(jié)順序的有符號(hào)的 short。
UIntegerUTF-8 字符,作為無(wú)符號(hào)整數(shù)。
uStringUU 編碼。
VFixnum把四個(gè)字符當(dāng)作 little-endian 字節(jié)順序的無(wú)符號(hào)的 long。
vFixnum把兩個(gè)字符當(dāng)作 little-endian 字節(jié)順序的無(wú)符號(hào)的 short。
wIntegerBER 壓縮的整數(shù)。
X 向后跳過(guò)一個(gè)字符。
x 向前跳過(guò)一個(gè)字符。
ZString和 * 一起使用,移除尾隨的 null 直到第一個(gè) null。
@ 跳過(guò) length 參數(shù)給定的偏移量。

實(shí)例

嘗試下面的實(shí)例,解壓各種數(shù)據(jù)。

"abc \0\0abc \0\0".unpack('A6Z6')   #=> ["abc", "abc "]
"abc \0\0".unpack('a3a3')           #=> ["abc", " \000\000"]
"abc \0abc \0".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"]