English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يُستخدم 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.
السطر يحدد القوائم التي يمكن تحويلها باستخدام الرموز المبددة أو الرموز غير القابلة للطباعة.
ملاحظة:في السلسلة الموجودة بين الأقواس المزدوجة، يتم تحليل الرموز المبددة. في السلسلة الموجودة بين الأقواس المفردة، لا يتم تحليل الرموز المبددة، ويتم إدخالها كما هي.
الشق | الرمز السداسي | الوصف |
---|---|---|
\a | 0x07 | الرمز الصوتي |
\b | 0x08 | الزر العكسي |
\cx | Control-x | |
\C-x | Control-x | |
\e | 0x1b | الرمز المبدد |
\f | 0x0c | الصفحة الجديدة |
\M-\C-x | Meta-Control-x | |
\n | 0x0a | الخط الجديد |
\nnn | التمثيل الثماني، حيث يكون n في النطاق 0.7 | |
\r | 0x0d | الخط النهائي |
\s | 0x20 | السطر الفارغ |
\t | 0x09 | الخط الفاصل |
\v | 0x0b | الخط العريض |
\x | الحرف x | |
\xnn | تمثيل بالسلسلة البتية، حيث n في نطاق 0.9 أو a.f أو A.F |
الترميز للغة Ruby هو ASCII، يمكن تمثيل الحروف باستخدام بايت واحد. إذا كنت تستخدم UTF-8 أو أي لغة حديثة أخرى، يمكن تمثيل الحروف باستخدام من البايت إلى أربعة بايت.
يمكنك استخدام $KCODE في بداية البرنامج لتغيير اللغة، مثلما هو موضح أدناه:
$KCODE = 'u'
إليك القيم المحتملة لـ $KCODE.
الترميز | الوصف |
---|---|
a | ASCII (مثل لا شيء). هذا هو الإعداد الافتراضي. |
e | EUC. |
n | لا شيء (مثل ASCII). |
u | UTF-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 هو عنصر نصي):
الترتيب | الطريقة & الوصف |
---|---|
1 | str % arg استخدام معيار التنسيق لتنسيق النص. إذا كان arg يحتوي على أكثر من استبدال، يجب أن يكون arg مصفوفة. للحصول على معلومات أكثر حول معيار التنسيق، راجع "نواة الكتلة" تحت sprintf. |
2 | str * integer العودة إلى نص جديد يحتوي على integer من str. بمعنى آخر، يتم تكرار str integer مرة. |
3 | str + other_str يضيف other_str إلى str. |
4 | str << obj تصل إلى شكل نصي. إذا كان العنصر في نطاق 0.255 من العدد الثابت Fixnum، يتم تحويله إلى حرف. قارن ذلك مع concat. |
5 | str <=> other_str تقارن str مع other_str، العودة إلى -1 (أقل) أو 0 (تساوي) أو 1 (أكبر). المقارنة تفرق بين الحروف الكبيرة والصغيرة. |
6 | str == obj تتحقق من تساوي str و obj. إذا لم يكن obj نصًا، يتم العودة إلى false، إذا كان str <=> obj، يتم العودة إلى true، يتم العودة إلى 0. |
7 | str =~ 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. |
16 | str.chop! مثل chop، ولكن str سيتم تغييره وإعادة إيصاله. |
17 | str.concat(other_str) يضيف other_str إلى str. |
18 | str.count(str, ...) يحسب عدد أحرف مجموعة واحدة أو أكثر. إذا كانت هناك عدة مجموعات، فإنه يحسب التقاء هذه المجموعات. |
19 | str.crypt(other_str) يطبق تعريض هشاشة أحادية الاتجاه على str. المعطى هو سلسلة من حرفين، ويجب أن تكون كل حرف في النطاق a.z أو A.Z أو 0.9 أو . أو /. |
20 | str.delete(other_str, ...) يعيد نسخة من str، يتم حذف جميع الأحرف في الت交汇 بين المعطيات. |
21 | str.delete!(other_str, ...) مثل delete، ولكن str سيتم تغييره وإعادة إيصاله. |
22 | str.downcase يعيد نسخة من str، يتم استبدال جميع الأحرف الكبيرة بالأحرف الصغيرة. |
23 | str.downcase! مثل downcase، ولكن str سيتم تغييره وإعادة إيصاله. |
24 | str.dump يعيد إصدار str، يتم استبدال جميع الرموز غير القابلة للطباعة برمز \nnn، يتم تشفير جميع الرموز الخاصة. |
25 | str.each(separator=$/) { |substr| block } استخدام المعامل كحرف فصل السجلات (الافتراضي هو $/) لتقسيم str، وتقديم كل فقاعة إلى block المقدم. |
26 | str.each_byte { |fixnum| block } تقديم كل بت من str إلى block، وإرجاع كل بت بتمثيله العشري. |
27 | str.each_line(separator=$/) { |substr| block } استخدام المعامل كحرف فصل السجلات (الافتراضي هو $/) لتقسيم str، وتقديم كل فقاعة إلى block المقدم. |
28 | str.empty? إذا كان str فارغًا (أي طول 0)، فيرجع إلى true. |
29 | str.eql?(other) إذا كانت كلا الأنماط لديها نفس الطول والمحتوى، فإنهما متساويان. |
30 | str.gsub(pattern, replacement) [أو] str.gsub(pattern) { |match| block } يعيد نسخة من str، ويستبدل جميع الظهور من pattern بالreplacement أو قيمة block. |
31 | str[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 من نهاية النص. |
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 ] يستبدل النص الكامل أو جزءًا منه. يشبه slice!. |
33 | str.gsub!(pattern, replacement) [or] str.gsub!(pattern) { |match| block } يؤدي إلى استبدال باستخدام String#gsub، ويقوم بتحويل النص (str) إذا لم يتم أي استبدال، يتم العودة إلى nil. |
34 | str.hash يعود إلى هشاشة قائمة على طول النص والمحتوى. |
35 | str.hex يأخذ الحروف المقدمة في النص (str) كرقم ثنائي عشري (يمكن أن يكون هناك رمز اختياري و 0x)، ويقوم بتحويلها إلى الرقم المتبادل. إذا كان هناك خطأ، يتم العودة إلى صفر. |
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]) يعود إلى الموقع الأولي لسلسلة النصوص أو الحرف (رقم ثابت) أو النمط (نمط النصوص) الذي يظهر في النص (str). إذا لم يتم العثور على أي شيء، يتم العودة إلى nil. إذا تم تقديم ثاني متغير، يتم تحديد موقع البداية في النص. |
38 | str.insert(index, other_str) يتم إدراج other_str قبل حرف في الموقع المحدد، ويتم تعديل str. إذا كان الموقع سالباً، فإنه يتم حسابه من نهاية السلسلة، ويتم إدراج other_str بعد الحرف المحدد. الغرض هو بدء إدراج سلسلة في الموقع المحدد. |
39 | str.inspect يعود إلى نسخة قابلة للطباعة من str، تحتوي على رموز خاصة مسبقة الإعداد. |
40 | str.intern [أو] str.to_sym يعود إلى الرمز المماثل لـ str، إذا لم يكن موجوداً يتم إنشاء رمز. |
41 | str.length يعود إلى طول str. يتم مقارنته بمقدار size. |
42 | str.ljust(integer, padstr=' ') إذا كان integer أكبر من طول str، فإنه يعود إلى سلسلة جديدة طولها integer، يتم تقسيم str إلى اليسار، ويتم استخدام padstr كملء. وإلا، يعود إلى str. |
43 | str.lstrip يعود إلى نسخة من str، تم إزالة الفراغات الأمامية. |
44 | str.lstrip! يتم إزالة الفراغات الأمامية من str، وإذا لم يتم أي تغيير، فإنه يعود إلى nil. |
45 | str.match(pattern) إذا لم يكن pattern نمطاً صياغياً، فإنه يتم تحويل pattern إلى نمط صياغي Regexp، ثم يتم استدعاء طريقة التطابق الخاصة به على str. |
46 | str.oct يعود إلى سلسلة تحتوي على الرقم الثنائي لـ str، ويتم اعتبار الرمز السابق (اختياري) كرمز علامة. إذا فشلت التحويل، فإنه يعود إلى 0. |
47 | str.replace(other_str) يستبدل محتويات str بالقيم المماثلة من other_str. |
48 | str.reverse يعود إلى سلسلة جديدة، تكون السلسلة الجديدة هي عكس str. |
49 | str.reverse! يقلب str، وسيتم تغيير str ويعود. |
50 | str.rindex(substring [, fixnum]) [أو] str.rindex(fixnum [, fixnum]) [أو] str.rindex(regexp [, fixnum]) يعود إلى مؤشر آخر ظهور لسلسلة فرعية أو حرف (fixnum) أو نمط (regexp) في str. إذا لم يتم العثور على أي شيء، فإنه يعود إلى nil. إذا تم تقديم ثاني إ参数، فإنه يتم تحديد موقف انتهاء البحث في السلسلة. لن يتم النظر في الأحرف التي تتجاوز هذا الموقع. |
51 | str.rjust(integer, padstr=' ') إذا كان integer أكبر من طول str، فإنه يرجع نصًا جديدًا بطول integer، مع إمالة يمينًا للنص، ويُستخدم padstr كملء. وإلا، يرجع str. |
52 | str.rstrip إرجاع نسخة من str، بعد إزالة المسافات الزائدة في النهاية. |
53 | str.rstrip! إزالة المسافات الزائدة في نهاية str، وإذا لم يكن هناك تغيير، فإنه يرجع nil. |
54 | str.scan(pattern) [أو] str.scan(pattern) { |match, ...| block } يُناسب شكل pattern (يمكن أن يكون تعبيرًا عاديًا Regexp أو نصًا String) يمر على str. لكل تطابق، سيُنشأ نتيجة، وستُضيف النتيجة إلى مجموعة النتائج أو تُنقل إلى block. إذا لم يحتوي pattern على مجموعات، فإن كل نتيجة مستقلة تتكون من النص المتطابق، $&. إذا كان يحتوي pattern على مجموعات، فإن كل نتيجة مستقلة هي مجموعة تحتوي على مدخل كل مجموعة. |
55 | str.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، فإنه سيُتجاهل تنفيذ العملية. |
56 | str.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. |
57 | str.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. |
58 | str.squeeze!([other_str]*) same as squeeze, but str changes and is returned, or nil if there is no change. |
59 | str.strip returns a copy of str with leading and trailing spaces removed. |
60 | str.strip! removes leading and trailing spaces from str, and returns nil if there is no change. |
61 | str.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. |
62 | str.sub!(pattern, replacement) [or] str.sub!(pattern) { |match| block } يتم تنفيذ String#sub لتغيير الاستبدال، وإرجاع str، وإذا لم يتم تنفيذ أي استبدال، فإنه سيتم إرجاع nil. |
63 | str.succ [أو] str.next يتم إرجاع النسخة الموروثة. |
64 | str.succ! [أو] str.next! مثل String#succ، ولكن str سيتم تغييره وإرجاعه. |
65 | str.sum(n=16) يتم إرجاع نتيجة التحقق من صحة الأحرف في str، حيث يكون n هو متغير Fixnum الاختياري، ويكون افتراضيًا 16. النتيجة هي ببساطة إضافة قيم الأحرف الثنائية في str مع بعضها البعض، ثم استخدام 2n - 1 كنموذج. |
66 | str.swapcase يتم إرجاع نسخة من str، يتم تحويل جميع الأحرف الكبيرة إلى صغيرة، وأيضًا تحويل جميع الأحرف الصغيرة إلى كبيرة. |
67 | str.swapcase! مثل String#swapcase، ولكن str سيتم تغييره وإرجاعه، وإذا لم يكن هناك تغيير، فسيتم إرجاع nil. |
68 | str.to_f يتم إرجاع النتيجة التي تُفسر فيها الأحرف المقدمة في str كعدد عشري. سيتم تجاهل الأحرف الزائدة في نهاية عدد صالح. إذا لم يكن هناك عدد صالح في بداية str، فإنه سيتم إرجاع 0.0. لن يتم توليد استثناء. |
69 | str.to_i(base=10) يتم إرجاع النتيجة التي تُفسر فيها الأحرف المقدمة في str كقاعدة عددية (القاعدة 2، 8، 10 أو 16). سيتم تجاهل الأحرف الزائدة في نهاية عدد صالح. إذا لم يكن هناك عدد صالح في بداية str، فإنه سيتم إرجاع 0. لن يتم توليد استثناء. |
70 | str.to_s [أو] str.to_str يتم إرجاع القيمة المقبولة. |
71 | str.tr(from_str, to_str) يتم إرجاع نسخة من str، يتم استبدال الأحرف في from_str بأحرف تناسبها في to_str. إذا كان to_str أقصر، فإنه سيتم تعبئة النهاية بأحرفها الأخيرة. يمكن استخدام الرموز c1.c2 لتمثيل نطاق الأحرف. إذا كان from_str يبدأ بـ ^، فإنه يعني جميع الأحرف غير المذكورة. |
72 | str.tr!(from_str, to_str) مثل String#tr، ولكن str سيتم تغييره وإرجاعه، وإذا لم يكن هناك تغيير، فسيتم إرجاع nil. |
73 | str.tr_s(from_str, to_str) يتم معالجة str وفقًا للقواعد الموصوفة في String#tr، ثم إزالة الأحرف المكررة التي تؤثر على الترجمة. |
74 | str.tr_s!(from_str, to_str) يساوي String#tr_s، ولكن سيتم تغيير str وسيتم العودة، أو العودة على nil إذا لم يكن هناك تغيير. |
75 | str.unpack(format) تفسير str بناءً على سلسلة format (قد تحتوي على بيانات ثنائية)، العودة بجدول من القيم المستخرجة. تتكون سلسلة format من سلسلة من أوامر أحرف واحدة. يمكن أن يتبع كل أمر عددًا، مما يعني تكرار الأمر. يتم استخدام علامة النجمة (*) لاستخدام جميع العناصر المتبقية. يمكن أن يتبع كل أمر سلسلة من الأحرف sSiIlL، ويمكن أن يتبع كل منها خطًا أسفل (_). يتم استخدام حجم النظام الأساسي المحلي للنوع المحدد، أو حجم مستقل عن المنصة إذا لم يكن هناك تحديد. |
76 | str.upcase يعود بنسخة من str، حيث سيتم استبدال جميع الحروف الصغيرة بحروف كبيرة. العمل غير الحساس بالبيئة، حيث سيؤثر فقط على الأحرف a إلى z. |
77 | str.upcase! تغيير محتوى str إلى حروف كبيرة، إذا لم يكن هناك تغيير فسيتم العودة على nil. |
78 | str.upto(other_str) { |s| block } مرور عبر القيم المتتابعة، بدءًا من str، حتى other_str (بما في ذلك)، ومرور كل قيمة إلى block. يتم استخدام طريقة String#succ لإنشاء كل قيمة. |
الجدول أدناه يوضح التعليمات المفككة الخاصة بمетод String#unpack.
التعليمات | العودة | الوصف |
---|---|---|
A | String | إزالة النهايات المكونة من null و空اء. |
a | String | السلسلة. |
B | String | استخراج أجزاء من كل حرف (أولاً الأكثر فعالية). |
b | String | استخراج أجزاء من كل حرف (أولاً الأقل فعالية). |
C | Fixnum | استخراج حرف كعدد غير سالب. |
c | Fixnum | استخراج حرف كعدد. |
D, d | Float | تقوم بتعيين طول sizeof(double) من الأحرف كـ double الأصلي. |
E | Float | تقوم بتعيين طول sizeof(double) من الأحرف كـ double وفقًا لترتيب البايتات الصغير. |
e | Float | تقوم بتعيين طول sizeof(float) من الأحرف كـ float وفقًا لترتيب البايتات الصغير. |
F, f | Float | تقوم بتعيين طول sizeof(float) من الأحرف كـ float الأصلي. |
G | Float | تقوم بتعيين طول sizeof(double) من الأحرف كـ double وفقًا لترتيب البايتات للشبكة. |
g | Float | تقوم بتعيين طول sizeof(float) من الأحرف كـ float وفقًا لترتيب البايتات للشبكة. |
H | String | 从每个字符中提取十六进制(首先是最高有效位)。 |
h | String | 从每个字符中提取十六进制(首先是最低有效位)。 |
I | Integer | 把 sizeof(int) 长度(通过 _ 修改)的连续字符当作原生的 integer。 |
i | Integer | 把 sizeof(int) 长度(通过 _ 修改)的连续字符当作有符号的原生的 integer。 |
L | Integer | 把四个(通过 _ 修改)连续字符当作无符号的原生的 long integer。 |
l | Integer | 把四个(通过 _ 修改)连续字符当作有符号的原生的 long integer。 |
M | String | 引用可打印的。 |
m | String | Base64 编码。 |
N | Integer | 把四个字符当作 network 字节顺序的无符号的 long。 |
n | Fixnum | 把两个字符当作 network 字节顺序的无符号的 short。 |
P | String | 把 sizeof(char *) 长度的字符当作指针,并从引用的位置返回 \emph{len} 字符。 |
p | String | 把 sizeof(char *) 长度的字符当作一个空结束字符的指针。 |
Q | Integer | 把八个字符当作无符号的 quad word(64 位)。 |
q | Integer | 把八个字符当作有符号的 quad word(64 位)。 |
S | Fixnum | 把两个(如果使用 _ 则不同)连续字符当作 native 字节顺序的无符号的 short。 |
s | Fixnum | 把两个(如果使用 _ 则不同)连续字符当作 native 字节顺序的有符号的 short。 |
U | Integer | UTF-8 字符,作为无符号整数。 |
u | String | UU 编码。 |
V | Fixnum | 把四个字符当作 little-endian 字节顺序的无符号的 long。 |
v | Fixnum | 把两个字符当作 little-endian 字节顺序的无符号的 short。 |
w | Integer | BER 压缩的整数。 |
X | 向后跳过一个字符。 | |
x | 向前跳过一个字符。 | |
Z | String | 和 * 一起使用,移除尾随的 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"]