English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل تعليمي الأساسيات لـ Ruby

دليل تعليمي متقدم لـ Ruby

الصفوف (String) في Ruby

يُستخدم Object String في Ruby لتحفظ أو تعمل على سلسلة من البايتات.

تُقسّم نصوص Ruby إلى نصوص مكتوبة بين أقواس مزدوجة (')' و نصوص مكتوبة بين أقواس مزدوجة ("")، الفرق بينهما هو أن نصوص مزدوجة تدعم العديد من حروف الاستبدال.

النص المكتوب بين أقواس مزدوجة

أبسط النصوص هي النصوص المكتوبة بين أقواس مزدوجة، حيث يتم تخزين النص بين أقواس مزدوجة:

هذا هو نص Ruby

إذا كنت بحاجة إلى استخدام حرف الشق المائول داخل نص مكتوب بين أقواس مزدوجة، يجب استخدام الشق المائول (\) داخل النص، حيث لن يفسر محول Ruby هذا الحرف كحرف نهاية النص:

هل لن تقرأ كتاب O'Reilly؟

الشق المائلة يمكن أن يُستخدم لتحويل الشق المائلة نفسها، حيث لن يتم تفسير الشق المائلة الثانية كحرف استبدال.

هذه هي خصائص الأنواع النصية في Ruby.

السلسلة المزدوجة

في السلسلة المزدوجة يمكننا استخدام #{} استخدام الـ #{} لتحليل قيمة التعبيرات:

إدراج المتغيرات في السلسلة النصية:

在线示例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
 
name1 = "Joe"
name2 = "Mary"
puts "مرحبًا #{name1}، Mary أين؟"

النتيجة الصادرة عن الأمثلة أعلاه هي:

مرحبًا Joe، Mary أين؟

العمليات الرياضية في السلسلة النصية:

在线示例

#!/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}"

النتيجة الصادرة عن الأمثلة أعلاه هي:

قيمة x هي 12
قيمة x + y هي 48
متوسط x + y + z هو 40

يدعم Ruby أيضًا نوعًا من المتغيرات النصية الموجهة باستخدام %q و %Q، حيث يستخدم %q قواعد الاستشهاد بالأقواس المفردة، بينما %Q يستخدم قواعد الاستشهاد بالأقواس المزدوجة، ويتبعها دليل البداية (!، [، {، و دليل النهاية }، ]، )،

الرموز التي تتبع q أو Q هي علامات الفصل. يمكن أن تكون علامة الفصل أي رمز غير ألفابيتي أحادي. مثل: [،،{،(،<،!،

在线示例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
 
desc1 = %Q{Ruby’s strings can use '' and "".}
desc2 = %q|Ruby’s strings can use '' and "".|
 
puts desc1
puts desc2

النتيجة الصادرة عن الأمثلة أعلاه هي:

يمكن استخدام ' و " في الأنواع النصية في Ruby.
يمكن استخدام ' و " في الأنواع النصية في Ruby.

الرمز المبدد

السطر يحدد القوائم التي يمكن تحويلها باستخدام الرموز المبددة أو الرموز غير القابلة للطباعة.

ملاحظة:في السلسلة الموجودة بين الأقواس المزدوجة، يتم تحليل الرموز المبددة. في السلسلة الموجودة بين الأقواس المفردة، لا يتم تحليل الرموز المبددة، ويتم إدخالها كما هي.

الشقالرمز السداسيالوصف
\a0x07الرمز الصوتي
\b0x08الزر العكسي
\cx Control-x
\C-x Control-x
\e0x1bالرمز المبدد
\f0x0cالصفحة الجديدة
\M-\C-x Meta-Control-x
\n0x0aالخط الجديد
\nnn التمثيل الثماني، حيث يكون n في النطاق 0.7
\r0x0dالخط النهائي
\s0x20السطر الفارغ
\t0x09الخط الفاصل
\v0x0bالخط العريض
\x الحرف x
\xnn تمثيل بالسلسلة البتية، حيث n في نطاق 0.9 أو a.f أو A.F

الترميز للحروف

الترميز للغة Ruby هو ASCII، يمكن تمثيل الحروف باستخدام بايت واحد. إذا كنت تستخدم UTF-8 أو أي لغة حديثة أخرى، يمكن تمثيل الحروف باستخدام من البايت إلى أربعة بايت.

يمكنك استخدام $KCODE في بداية البرنامج لتغيير اللغة، مثلما هو موضح أدناه:

$KCODE = 'u'

إليك القيم المحتملة لـ $KCODE.

الترميزالوصف
aASCII (مثل لا شيء). هذا هو الإعداد الافتراضي.
eEUC.
nلا شيء (مثل ASCII).
uUTF-8.

طرق نصية مدمجة

نحتاج إلى وجود مثال على عنصر نصي لاستدعاء طرق String. إليك كيفية إنشاء عناصر نصية على النحو التالي:

new [String.new(str="")]

سيتم العودة إلى نص يحتوي على str مجردة جديدة من نصي جديد. الآن، باستخدام str العنصر، يمكننا استدعاء أي طريقة مثبتة. على سبيل المثال:

在线示例

#!/usr/bin/ruby
 
myStr = String.new("THIS IS TEST")
foo = myStr.downcase
 
puts "#{foo}"

سيكون هناك نتيجة مثل ذلك:

this is test

إليك قائمة بالطرق العامة للنصوص (افتراضًا أن str هو عنصر نصي):

الترتيبالطريقة & الوصف
1str % arg
استخدام معيار التنسيق لتنسيق النص. إذا كان arg يحتوي على أكثر من استبدال، يجب أن يكون arg مصفوفة. للحصول على معلومات أكثر حول معيار التنسيق، راجع "نواة الكتلة" تحت sprintf.
2str * integer
العودة إلى نص جديد يحتوي على integer من str. بمعنى آخر، يتم تكرار str integer مرة.
3str + other_str
يضيف other_str إلى str.
4str << obj
تصل إلى شكل نصي. إذا كان العنصر في نطاق 0.255 من العدد الثابت Fixnum، يتم تحويله إلى حرف. قارن ذلك مع concat.
5str <=> other_str
تقارن str مع other_str، العودة إلى -1 (أقل) أو 0 (تساوي) أو 1 (أكبر). المقارنة تفرق بين الحروف الكبيرة والصغيرة.
6str == obj
تتحقق من تساوي str و obj. إذا لم يكن obj نصًا، يتم العودة إلى false، إذا كان str <=> obj، يتم العودة إلى true، يتم العودة إلى 0.
7str =~ obj
7
7يطابق str بنمط النمط obj. يعيد موقع بدء التطابق، وإلا يعيد false.
8
str[position] # ملاحظة: يعيد ASCII بدلاً من الحرف
str[start, length]

str[start..end]
str[start...end]استخدام المؤشر لقطع النص.
9
str.capitalizeيحول النص إلى أحرف كبيرة.
10
str.capitalize!مثل capitalize، ولكن str سيتم تغييره وإعادة إيصاله.
11
str.casecmpمقارنة النصوص بدون فرق بين الحروف الكبيرة والصغيرة.
str.center
يوضع النص في وسط.13
str.chomp
يحذف مسجل الفصل ($/) من نهاية السلسلة، عادةً \n. إذا لم يكن هناك فصل، لا يتم أي إجراء.14
str.chomp!
مثل chomp، ولكن str سيتم تغييره وإعادة إيصاله.str.chop
يحذف الأحرف الأخيرة من str.
16str.chop!
مثل chop، ولكن str سيتم تغييره وإعادة إيصاله.
17str.concat(other_str)
يضيف other_str إلى str.
18str.count(str, ...)
يحسب عدد أحرف مجموعة واحدة أو أكثر. إذا كانت هناك عدة مجموعات، فإنه يحسب التقاء هذه المجموعات.
19str.crypt(other_str)
يطبق تعريض هشاشة أحادية الاتجاه على str. المعطى هو سلسلة من حرفين، ويجب أن تكون كل حرف في النطاق a.z أو A.Z أو 0.9 أو . أو /.
20str.delete(other_str, ...)
يعيد نسخة من str، يتم حذف جميع الأحرف في الت交汇 بين المعطيات.
21str.delete!(other_str, ...)
مثل delete، ولكن str سيتم تغييره وإعادة إيصاله.
22str.downcase
يعيد نسخة من str، يتم استبدال جميع الأحرف الكبيرة بالأحرف الصغيرة.
23str.downcase!
مثل downcase، ولكن str سيتم تغييره وإعادة إيصاله.
24str.dump
يعيد إصدار str، يتم استبدال جميع الرموز غير القابلة للطباعة برمز \nnn، يتم تشفير جميع الرموز الخاصة.
25str.each(separator=$/) { |substr| block }
استخدام المعامل كحرف فصل السجلات (الافتراضي هو $/) لتقسيم str، وتقديم كل فقاعة إلى block المقدم.
26str.each_byte { |fixnum| block }
تقديم كل بت من str إلى block، وإرجاع كل بت بتمثيله العشري.
27str.each_line(separator=$/) { |substr| block }
استخدام المعامل كحرف فصل السجلات (الافتراضي هو $/) لتقسيم str، وتقديم كل فقاعة إلى block المقدم.
28str.empty?
إذا كان str فارغًا (أي طول 0)، فيرجع إلى true.
29str.eql?(other)
إذا كانت كلا الأنماط لديها نفس الطول والمحتوى، فإنهما متساويان.
30str.gsub(pattern, replacement) [أو]
str.gsub(pattern) { |match| block }

يعيد نسخة من str، ويستبدل جميع الظهور من pattern بالreplacement أو قيمة block.
31str[fixnum] [أو] str[fixnum,fixnum] [أو] str[range] [أو] str[regexp] [أو] str[regexp, fixnum] [أو] str[other_str]
استخدام المعاملات التالية لاستدعاء str: المعامل هو Fixnum، فيرجع إلى رمز الترميز للfixnum؛ المعامل هو Fixnumين، فيرجع إلى فقاعة من البداية (الfixnum الأول) حتى طول (الfixnum الثاني); المعامل هو نطاق، فيرجع إلى فقاعة من النطاق؛ المعامل هو نمط تصادمي، فيرجع إلى الجزء من النمط الذي يتطابق مع النص؛ المعامل هو نمط تصادمي يحتوي على fixnum، فيرجع إلى بيانات التطابق في الموقع fixnum؛ المعامل هو other_str، فيرجع إلى الفقاعة التي تتطابق مع other_str. Fixnum سالب من البداية -1 من نهاية النص.
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 ]
يستبدل النص الكامل أو جزءًا منه. يشبه slice!.
33str.gsub!(pattern, replacement) [or] str.gsub!(pattern) { |match| block }
يؤدي إلى استبدال باستخدام String#gsub، ويقوم بتحويل النص (str) إذا لم يتم أي استبدال، يتم العودة إلى nil.
34str.hash
يعود إلى هشاشة قائمة على طول النص والمحتوى.
35str.hex
يأخذ الحروف المقدمة في النص (str) كرقم ثنائي عشري (يمكن أن يكون هناك رمز اختياري و 0x)، ويقوم بتحويلها إلى الرقم المتبادل. إذا كان هناك خطأ، يتم العودة إلى صفر.
36str.include? other_str [or] str.include? fixnum
إذا كان النص (str) يحتوي على النصوص أو الحرف المحدد، يتم العودة إلى true.
37str.index(substring [, offset]) [or]
str.index(fixnum [, offset]) [or]
str.index(regexp [, offset])

يعود إلى الموقع الأولي لسلسلة النصوص أو الحرف (رقم ثابت) أو النمط (نمط النصوص) الذي يظهر في النص (str). إذا لم يتم العثور على أي شيء، يتم العودة إلى nil. إذا تم تقديم ثاني متغير، يتم تحديد موقع البداية في النص.
38str.insert(index, other_str)
يتم إدراج other_str قبل حرف في الموقع المحدد، ويتم تعديل str. إذا كان الموقع سالباً، فإنه يتم حسابه من نهاية السلسلة، ويتم إدراج other_str بعد الحرف المحدد. الغرض هو بدء إدراج سلسلة في الموقع المحدد.
39str.inspect
يعود إلى نسخة قابلة للطباعة من str، تحتوي على رموز خاصة مسبقة الإعداد.
40str.intern [أو] str.to_sym
يعود إلى الرمز المماثل لـ str، إذا لم يكن موجوداً يتم إنشاء رمز.
41str.length
يعود إلى طول str. يتم مقارنته بمقدار size.
42str.ljust(integer, padstr=' ')
إذا كان integer أكبر من طول str، فإنه يعود إلى سلسلة جديدة طولها integer، يتم تقسيم str إلى اليسار، ويتم استخدام padstr كملء. وإلا، يعود إلى str.
43str.lstrip
يعود إلى نسخة من str، تم إزالة الفراغات الأمامية.
44str.lstrip!
يتم إزالة الفراغات الأمامية من str، وإذا لم يتم أي تغيير، فإنه يعود إلى nil.
45str.match(pattern)
إذا لم يكن pattern نمطاً صياغياً، فإنه يتم تحويل pattern إلى نمط صياغي Regexp، ثم يتم استدعاء طريقة التطابق الخاصة به على str.
46str.oct
يعود إلى سلسلة تحتوي على الرقم الثنائي لـ str، ويتم اعتبار الرمز السابق (اختياري) كرمز علامة. إذا فشلت التحويل، فإنه يعود إلى 0.
47str.replace(other_str)
يستبدل محتويات str بالقيم المماثلة من other_str.
48str.reverse
يعود إلى سلسلة جديدة، تكون السلسلة الجديدة هي عكس str.
49str.reverse!
يقلب str، وسيتم تغيير str ويعود.
50str.rindex(substring [, fixnum]) [أو]
str.rindex(fixnum [, fixnum]) [أو]
str.rindex(regexp [, fixnum])

يعود إلى مؤشر آخر ظهور لسلسلة فرعية أو حرف (fixnum) أو نمط (regexp) في str. إذا لم يتم العثور على أي شيء، فإنه يعود إلى nil. إذا تم تقديم ثاني إ参数، فإنه يتم تحديد موقف انتهاء البحث في السلسلة. لن يتم النظر في الأحرف التي تتجاوز هذا الموقع.
51str.rjust(integer, padstr=' ')
إذا كان integer أكبر من طول str، فإنه يرجع نصًا جديدًا بطول integer، مع إمالة يمينًا للنص، ويُستخدم padstr كملء. وإلا، يرجع str.
52str.rstrip
إرجاع نسخة من str، بعد إزالة المسافات الزائدة في النهاية.
53str.rstrip!
إزالة المسافات الزائدة في نهاية str، وإذا لم يكن هناك تغيير، فإنه يرجع nil.
54str.scan(pattern) [أو]
str.scan(pattern) { |match, ...| block }

يُناسب شكل pattern (يمكن أن يكون تعبيرًا عاديًا Regexp أو نصًا String) يمر على str. لكل تطابق، سيُنشأ نتيجة، وستُضيف النتيجة إلى مجموعة النتائج أو تُنقل إلى block. إذا لم يحتوي pattern على مجموعات، فإن كل نتيجة مستقلة تتكون من النص المتطابق، $&. إذا كان يحتوي pattern على مجموعات، فإن كل نتيجة مستقلة هي مجموعة تحتوي على مدخل كل مجموعة.
55str.slice(fixnum) [أو] str.slice(fixnum, fixnum) [أو]
str.slice(range) [أو] str.slice(regexp) [أو]
str.slice(regexp, fixnum) [أو] str.slice(other_str)
انظر إلى str[fixnum]، إلخ.
str.slice!(fixnum) [أو] str.slice!(fixnum, fixnum) [أو] str.slice!(range) [أو] str.slice!(regexp) [أو] str.slice!(other_str)

من إزالة الجزء المحدد من str، وإرجاع الجزء المحدد. إذا كان القيمة خارج النطاق، فإن المعامل يحتوي على Fixnum، فإنه سيكون هناك IndexError. إذا كان المعامل في شكل range، فإنه سيكون هناك RangeError، إذا كان المعامل في شكل Regexp و String، فإنه سيُتجاهل تنفيذ العملية.
56str.split(pattern=$;, [limit])

splits str into substrings based on the delimiter and returns an array of these substrings.

if pattern is a string String, it will be used as a delimiter when splitting str. If pattern is a single space, str is split based on spaces, leading spaces and consecutive space characters are ignored.

if pattern  is a regular expression Regexp, then str is split at the place where pattern matches. When pattern matches a zero-length string, str is split into single characters.

if omitted pattern the value of $; is used. If $; is nil (the default), str is split based on spaces, as if the space ` ` was specified as the delimiter.

if omitted limit parameter, suppresses trailing null fields. If limit is a positive number, it returns the maximum number of fields (if limit is 1, it returns the entire string as the only entry in the array). If limit is a negative number, the number of returned fields is not limited, and trailing null fields are not suppressed.

57str.squeeze([other_str]*)
uses a program described by String#count to build a series of characters from the other_str parameter. Returns a new string where the same characters in the set are replaced with a single character. If no parameter is given, all identical characters are replaced with a single character.
58str.squeeze!([other_str]*)
same as squeeze, but str changes and is returned, or nil if there is no change.
59str.strip
returns a copy of str with leading and trailing spaces removed.
60str.strip!
removes leading and trailing spaces from str, and returns nil if there is no change.
61str.sub(pattern, replacement) [or]
str.sub(pattern) { |match| block }

returns a copy of str, where the first occurrence of pattern is replaced with the value of replacement or block.
62str.sub!(pattern, replacement) [or]
str.sub!(pattern) { |match| block }

يتم تنفيذ String#sub لتغيير الاستبدال، وإرجاع str، وإذا لم يتم تنفيذ أي استبدال، فإنه سيتم إرجاع nil.
63str.succ [أو] str.next
يتم إرجاع النسخة الموروثة.
64str.succ! [أو] str.next!
مثل String#succ، ولكن str سيتم تغييره وإرجاعه.
65str.sum(n=16)
يتم إرجاع نتيجة التحقق من صحة الأحرف في str، حيث يكون n هو متغير Fixnum الاختياري، ويكون افتراضيًا 16. النتيجة هي ببساطة إضافة قيم الأحرف الثنائية في str مع بعضها البعض، ثم استخدام 2n - 1 كنموذج.
66str.swapcase
يتم إرجاع نسخة من str، يتم تحويل جميع الأحرف الكبيرة إلى صغيرة، وأيضًا تحويل جميع الأحرف الصغيرة إلى كبيرة.
67str.swapcase!
مثل String#swapcase، ولكن str سيتم تغييره وإرجاعه، وإذا لم يكن هناك تغيير، فسيتم إرجاع nil.
68str.to_f
يتم إرجاع النتيجة التي تُفسر فيها الأحرف المقدمة في str كعدد عشري. سيتم تجاهل الأحرف الزائدة في نهاية عدد صالح. إذا لم يكن هناك عدد صالح في بداية str، فإنه سيتم إرجاع 0.0. لن يتم توليد استثناء.
69str.to_i(base=10)
يتم إرجاع النتيجة التي تُفسر فيها الأحرف المقدمة في str كقاعدة عددية (القاعدة 2، 8، 10 أو 16). سيتم تجاهل الأحرف الزائدة في نهاية عدد صالح. إذا لم يكن هناك عدد صالح في بداية str، فإنه سيتم إرجاع 0. لن يتم توليد استثناء.
70str.to_s [أو] str.to_str
يتم إرجاع القيمة المقبولة.
71str.tr(from_str, to_str)
يتم إرجاع نسخة من str، يتم استبدال الأحرف في from_str بأحرف تناسبها في to_str. إذا كان to_str أقصر، فإنه سيتم تعبئة النهاية بأحرفها الأخيرة. يمكن استخدام الرموز c1.c2 لتمثيل نطاق الأحرف. إذا كان from_str يبدأ بـ ^، فإنه يعني جميع الأحرف غير المذكورة.
72str.tr!(from_str, to_str)
مثل String#tr، ولكن str سيتم تغييره وإرجاعه، وإذا لم يكن هناك تغيير، فسيتم إرجاع nil.
73str.tr_s(from_str, to_str)
يتم معالجة str وفقًا للقواعد الموصوفة في String#tr، ثم إزالة الأحرف المكررة التي تؤثر على الترجمة.
74str.tr_s!(from_str, to_str)
يساوي String#tr_s، ولكن سيتم تغيير str وسيتم العودة، أو العودة على nil إذا لم يكن هناك تغيير.
75str.unpack(format)
تفسير str بناءً على سلسلة format (قد تحتوي على بيانات ثنائية)، العودة بجدول من القيم المستخرجة. تتكون سلسلة format من سلسلة من أوامر أحرف واحدة. يمكن أن يتبع كل أمر عددًا، مما يعني تكرار الأمر. يتم استخدام علامة النجمة (*) لاستخدام جميع العناصر المتبقية. يمكن أن يتبع كل أمر سلسلة من الأحرف sSiIlL، ويمكن أن يتبع كل منها خطًا أسفل (_). يتم استخدام حجم النظام الأساسي المحلي للنوع المحدد، أو حجم مستقل عن المنصة إذا لم يكن هناك تحديد.
76str.upcase
يعود بنسخة من str، حيث سيتم استبدال جميع الحروف الصغيرة بحروف كبيرة. العمل غير الحساس بالبيئة، حيث سيؤثر فقط على الأحرف a إلى z.
77str.upcase!
تغيير محتوى str إلى حروف كبيرة، إذا لم يكن هناك تغيير فسيتم العودة على nil.
78str.upto(other_str) { |s| block }
مرور عبر القيم المتتابعة، بدءًا من str، حتى other_str (بما في ذلك)، ومرور كل قيمة إلى block. يتم استخدام طريقة String#succ لإنشاء كل قيمة.

تعليمات تفكك السلسلة

الجدول أدناه يوضح التعليمات المفككة الخاصة بمетод String#unpack.

التعليماتالعودةالوصف
AStringإزالة النهايات المكونة من null و空اء.
aStringالسلسلة.
BStringاستخراج أجزاء من كل حرف (أولاً الأكثر فعالية).
bStringاستخراج أجزاء من كل حرف (أولاً الأقل فعالية).
CFixnumاستخراج حرف كعدد غير سالب.
cFixnumاستخراج حرف كعدد.
D, dFloatتقوم بتعيين طول sizeof(double) من الأحرف كـ double الأصلي.
EFloatتقوم بتعيين طول sizeof(double) من الأحرف كـ double وفقًا لترتيب البايتات الصغير.
eFloatتقوم بتعيين طول sizeof(float) من الأحرف كـ float وفقًا لترتيب البايتات الصغير.
F, fFloatتقوم بتعيين طول sizeof(float) من الأحرف كـ float الأصلي.
GFloatتقوم بتعيين طول sizeof(double) من الأحرف كـ double وفقًا لترتيب البايتات للشبكة.
gFloatتقوم بتعيين طول sizeof(float) من الأحرف كـ float وفقًا لترتيب البايتات للشبكة.
HString从每个字符中提取十六进制(首先是最高有效位)。
hString从每个字符中提取十六进制(首先是最低有效位)。
IInteger把 sizeof(int) 长度(通过 _ 修改)的连续字符当作原生的 integer。
iInteger把 sizeof(int) 长度(通过 _ 修改)的连续字符当作有符号的原生的 integer。
LInteger把四个(通过 _ 修改)连续字符当作无符号的原生的 long integer。
lInteger把四个(通过 _ 修改)连续字符当作有符号的原生的 long integer。
MString引用可打印的。
mStringBase64 编码。
NInteger把四个字符当作 network 字节顺序的无符号的 long。
nFixnum把两个字符当作 network 字节顺序的无符号的 short。
PString把 sizeof(char *) 长度的字符当作指针,并从引用的位置返回 \emph{len} 字符。
pString把 sizeof(char *) 长度的字符当作一个空结束字符的指针。
QInteger把八个字符当作无符号的 quad word(64 位)。
qInteger把八个字符当作有符号的 quad word(64 位)。
SFixnum把两个(如果使用 _ 则不同)连续字符当作 native 字节顺序的无符号的 short。
sFixnum把两个(如果使用 _ 则不同)连续字符当作 native 字节顺序的有符号的 short。
UIntegerUTF-8 字符,作为无符号整数。
uStringUU 编码。
VFixnum把四个字符当作 little-endian 字节顺序的无符号的 long。
vFixnum把两个字符当作 little-endian 字节顺序的无符号的 short。
wIntegerBER 压缩的整数。
X 向后跳过一个字符。
x 向前跳过一个字符。
ZString和 * 一起使用,移除尾随的 null 直到第一个 null。
@ 跳过 length 参数给定的偏移量。

在线示例

尝试下面的示例,解压各种数据。

"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"]