الفرق بين المراجعتين ل"Ruby/Array/pack"

من موسوعة حسوب
< Ruby‏ | Array
اذهب إلى التنقل اذهب إلى البحث
سطر 16: سطر 16:
 
=== <code>aTemplateString</code> ===
 
=== <code>aTemplateString</code> ===
 
يأخذ هذا المعامل إحدى قيم الموجهات المستعملة مع التابع <code>pack</code> وهي:
 
يأخذ هذا المعامل إحدى قيم الموجهات المستعملة مع التابع <code>pack</code> وهي:
-------
 
 
 
{| class="wikitable"
 
{| class="wikitable"
!موجهات من النوع Integer            
+
!موجهات من النوع Integer
!عناصر المصفوفة
+
!الصنف المعاد
!شرح                                                                                      
+
!شرح
 
|-
 
|-
 
|<code>C</code>
 
|<code>C</code>
|<code>Integer</code>  
+
|<code>Integer</code>
|8 بتات بدون إشارة (‎8-bit unsigned)
+
|عدد بحجم 8 بايتات عديمة الإشارة (‎8-bit unsigned).
 
|-
 
|-
 
|<code>S</code>
 
|<code>S</code>
|<code>Integer</code>  
+
|<code>Integer</code>
|16 بتة بدون إشارة، هندي أولي  ‎16-bit unsigned, native endian [uint16_t] )‎)
+
|عدد بحجم 16 بت عديم الإشارة، مع اعتماد الترتيب الطبيعي (native endian) للبايتات uint16_t)‎).
 
|-
 
|-
 
|<code>L</code>
 
|<code>L</code>
|<code>Integer</code>  
+
|<code>Integer</code>
|32 بتة بدون إشارة، هندي أولي  ‎32-bit unsigned, native endian [uint32_t] )‎)
+
|عدد بحجم 32 بت عديم الإشارة، مع اعتماد الترتيب الطبيعي (native endian) للبايتات uint32_t)‎).
 
|-
 
|-
 
|<code>Q</code>
 
|<code>Q</code>
|<code>Integer</code>  
+
|<code>Integer</code>
|64 بتة بدون إشارة، هندي أولي  ‎64-bit unsigned, native endian [uint64_t] )‎)
+
|عدد بحجم 64 بت عديم الإشارة، مع اعتماد الترتيب الطبيعي (native endian) للبايتات uint64_t)‎).
 
|-
 
|-
 
|<code>J</code>
 
|<code>J</code>
|<code>Integer</code>  
+
|<code>Integer</code>
|عرض المؤشر بدون إشارة، هندي أولي (pointer width unsigned, native endian [uintptr_t]‎ )
+
|عرض المؤشر عديم الإشارة، مع اعتماد الترتيب الطبيعي (native endian) للبايتات uintptr_t)‎).
هذا الموجه متاح منذ Ruby 2.3
+
متاح منذ Ruby 2.3.
 
|-
 
|-
 
| colspan="3" |
 
| colspan="3" |
 
|-
 
|-
 
|c
 
|c
|<code>Integer</code>  
+
|<code>Integer</code>
|8 بتات بإشارة (‎8-bit signed)
+
|عدد بحجم 8 بايتات ذات إشارة (‎8-bit signed).
 
|-
 
|-
 
|<code>s</code>
 
|<code>s</code>
|<code>Integer</code>  
+
|<code>Integer</code>
|16 بتة بإشارة، هندي أولي  ‎16-bit signed, native endian [int16_t] )‎)
+
|عدد بحجم 16 بت ذو إشارة، مع اعتماد الترتيب الطبيعي (native endian) للبايتات int16_t)‎).
 
|-
 
|-
 
|<code>l</code>
 
|<code>l</code>
|<code>Integer</code>  
+
|<code>Integer</code>
|32 بتة بإشارة، هندي أولي  ‎32-bit signed, native endian [int32_t] )‎)
+
|عدد بحجم 32 بت ذو إشارة، مع اعتماد الترتيب الطبيعي (native endian) للبايتات int32_t)‎).
 
|-
 
|-
 
|<code>q</code>
 
|<code>q</code>
|<code>Integer</code>  
+
|<code>Integer</code>
|64 بتة بإشارة، هندي أولي  ‎64-bit signed, native endian [int64_t] )‎)
+
|عدد بحجم 16 بت ذو إشارة، مع اعتماد الترتيب الطبيعي (native endian) للبايتات int64_t)‎).
 
|-
 
|-
 
|<code>j</code>
 
|<code>j</code>
|<code>Integer</code>  
+
|<code>Integer</code>
|عرض المؤشر بإشارة، هندي أولي (pointer width signed, native endian [intptr_t]‎ )
+
|عرض المؤشر ذي الإشارة، مع اعتماد الترتيب الطبيعي (native endian) للبايتات intptr_t)‎).
هذا الموجه متاح منذ Ruby 2.3
+
متاح منذ Ruby 2.3.
 
|-
 
|-
 
|
 
|
سطر 73: سطر 71:
 
|<code>S_ S!‎</code>
 
|<code>S_ S!‎</code>
 
|<code>Integer</code>
 
|<code>Integer</code>
|عدد قصير بدون إشارة، هندي أولي (unsigned short, native endian)
+
|عدد صغير عديم الإشارة، مع اعتماد الترتيب الطبيعي للبايتات (unsigned short, native endian).
 
|-
 
|-
 
|<code>I I_ I!‎</code>
 
|<code>I I_ I!‎</code>
 
|<code>Integer</code>
 
|<code>Integer</code>
|عدد صحيح بدون إشارة، هندي أولي (unsigned int, native endian)
+
|عدد صحيح عديم الإشارة، مع اعتماد الترتيب الطبيعي للبايتات (unsigned int, native endian).
 
|-
 
|-
 
|<code>L_ L!‎</code>
 
|<code>L_ L!‎</code>
 
|<code>Integer</code>
 
|<code>Integer</code>
|عدد طويل بدون إشارة، هندي أولي (unsigned long, native endian)
+
|عدد كبير عديم الإشارة، مع اعتماد الترتيب الطبيعي للبايتات (unsigned long, native endian).
 
|-
 
|-
 
|<code>Q_ Q!‎</code>
 
|<code>Q_ Q!‎</code>
 
|<code>Integer</code>
 
|<code>Integer</code>
|عدد طويل طويل بدون إشارة، هندي أولي (unsigned long long, native endian)
+
|عدد كبير جدًا عديم الإشارة، مع اعتماد الترتيب الطبيعي للبايتات (unsigned long long, native endian).
يطلق الخطأ <code>ArgumentError</code> في حال لم يكن في المنصة النوع long long.
+
يطلق الخطأ <code>ArgumentError</code> في حال لم يكن في المنصة النوع <code>long long</code>.
  
متاح منذ Ruby 2.3
+
متاح منذ Ruby 2.1.
 
|-
 
|-
 
|<code>J!‎</code>
 
|<code>J!‎</code>
 
|<code>Integer</code>
 
|<code>Integer</code>
|uintptr_t، هندي أولي (مثل <code>J</code>)
+
|عرض المؤشر عديم الإشارة، مع اعتماد الترتيب الطبيعي للبايتات (مثل الموجه <code>J</code>).
متاح منذ Ruby 2.3  
+
متاح منذ Ruby 2.3.
 
|-
 
|-
 
|
 
|
سطر 101: سطر 99:
 
|<code>s_ s!‎</code>
 
|<code>s_ s!‎</code>
 
|<code>Integer</code>
 
|<code>Integer</code>
|عدد قصير بإشارة، هندي أولي (signed short, native endian)
+
|عدد صغير ذو إشارة، مع اعتماد الترتيب الطبيعي للبايتات (signed short, native endian).
 
|-
 
|-
 
|<code>i i_ i!‎</code>
 
|<code>i i_ i!‎</code>
 
|<code>Integer</code>
 
|<code>Integer</code>
|عدد صحيح بإشارة، هندي أولي (signed int, native endian)
+
|عدد صحيح ذو إشارة، مع اعتماد الترتيب الطبيعي للبايتات (signed int, native endian).
 
|-
 
|-
 
|<code>l_ l!‎</code>
 
|<code>l_ l!‎</code>
 
|<code>Integer</code>
 
|<code>Integer</code>
|عدد طويل بإشارة، هندي أولي (signed long, native endian)
+
|عدد كبير بإشارة، مع اعتماد الترتيب الطبيعي للبايتات (signed long, native endian).
 
|-
 
|-
 
|<code>q_ q!‎</code>
 
|<code>q_ q!‎</code>
 
|<code>Integer</code>
 
|<code>Integer</code>
|عدد  long long بإشارة، هندي أولي (signed long long, native endian)
+
|عدد  كبير جدًا ذو إشارة، مع اعتماد الترتيب الطبيعي للبايتات (signed long long, native endian).
يطلق الخطأ <code>ArgumentError</code> في حال لم يكن في المنصة النوع long long.
+
يطلق الخطأ <code>ArgumentError</code> في حال لم يكن في المنصة النوع <code>long long</code>.
  
متاح منذ Ruby 2.3
+
متاح منذ Ruby 2.1
 
|-
 
|-
 
|<code>j!‎</code>
 
|<code>j!‎</code>
 
|<code>Integer</code>
 
|<code>Integer</code>
|intptr_t، هندي أولي (مثل <code>j</code>)
+
|عرض المؤشر ذي الإشارة، مع اعتماد الترتيب الطبيعي للبايتات (مثل <code>j</code>).
متاح منذ Ruby 2.3  
+
متاح منذ Ruby 2.3.
 
|-
 
|-
 
|
 
|
سطر 127: سطر 125:
 
|
 
|
 
|-
 
|-
|<code>S> s> S!> s!>‎</code>
+
|<code>S> s> S!> s!>‎</code><code>L> l> L!> l!>‎</code><code>I!> i!> ‎</code>
 
 
<code>L> l> L!> l!>‎</code>
 
 
 
<code>I!> i!> ‎</code>
 
  
 
<code>Q> q> Q!> q!>‎</code>
 
<code>Q> q> Q!> q!>‎</code>
سطر 137: سطر 131:
 
<code>J> j> J!> j!>‎</code>
 
<code>J> j> J!> j!>‎</code>
 
|<code>Integer</code>
 
|<code>Integer</code>
|مثل الموجهات التي لا تحتوي "<code><</code>"، باستثناء أن نوعها هندي كبير (big endian).
+
|مثل الموجهات التي لا تحتوي "<"، باستثناء كون البايتات الأقل أهمية مخزنة أولًا (big endian).
متاحة منذ Ruby 1.9.3
+
إن <code>I!> i!>‎</code> متاحة منذ Ruby 1.9.3.
  
"<code>S></code>‎" مثلها مثل "<code>n</code>"
+
"<code>S></code>‎" مثله مثل "<code>n</code>"
  
"<code>L></code>‎" مثلها مثل "<code>N</code>"
+
"<code>L></code>‎" مثله مثل "<code>N</code>"
 
|-
 
|-
|<code>S< s< S!< s!<‎</code>
+
|<code>S< s< S!< s!<‎</code><code>L< l< L!< l!<‎</code><code>I!< i!<‎</code>
 
 
<code>L< l< L!< l!<‎</code>
 
 
 
<code>I!< i!<‎</code>
 
  
 
<code>Q< q< Q!< q!<‎</code>
 
<code>Q< q< Q!< q!<‎</code>
سطر 154: سطر 144:
 
<code>J< j< J!< j!<‎</code>
 
<code>J< j< J!< j!<‎</code>
 
|<code>Integer</code>
 
|<code>Integer</code>
|مثل الموجهات التي لا تحتوي "<code><</code>"، باستثناء أن نوعها هندي صغير (little endian).
+
|مثل الموجهات التي لا تحتوي ">"، باستثناء كون البايتات الأكثر أهمية مخزنة أولًا (little endian).
متاحة منذ Ruby 1.9.3
+
إن <code>I!< i!<‎</code> متاحة منذ Ruby 1.9.3.
  
"<code>S<</code>‎" مثلها مثل "<code>v</code>"
+
"<code>S<</code>‎" مثله مثل "<code>v</code>"
  
"<code>L<</code>‎" مثلها مثل "<code>V</code>"
+
"<code>L<</code>‎" مثله مثل "<code>V</code>"
 
|-
 
|-
 
|
 
|
سطر 167: سطر 157:
 
|n
 
|n
 
|<code>Integer</code>
 
|<code>Integer</code>
|‎16-bit unsigned, network (big-endian) byte order‎
+
|عدد بحجم 16 بت عديم الإشارة، ترتيب بايت شبكي (network byte order، أي البايت الأكثر أهمية مخزَّن أولًا [big-endian]).
 
|-
 
|-
 
|N
 
|N
 
|<code>Integer</code>
 
|<code>Integer</code>
|‎32-bit unsigned, network (big-endian) byte order‎
+
|عدد بحجم 32 بت عديم الإشارة، ترتيب بايت شبكي (network byte order، أي البايت الأكثر أهمية مخزَّن أولًا [big-endian]).
 
|-
 
|-
 
|v
 
|v
 
|<code>Integer</code>
 
|<code>Integer</code>
|‎16-bit unsigned, VAX (little-endian) byte order‎
+
|عدد بحجم 16 بت عديم الإشارة، ترتيب البايت بحسب VAX (أي VAX byte order، البايت الأقل أهمية مخزَّن أولًا [little-endian]).
 
|-
 
|-
 
|V
 
|V
 
|<code>Integer</code>
 
|<code>Integer</code>
|‎32-bit unsigned, VAX (little-endian) byte order‎
+
|عدد بحجم 32 بت عديم الإشارة، ترتيب البايت بحسب VAX (أي VAX byte order، البايت الأقل أهمية مخزَّن أولًا [little-endian]).
 +
|-
 +
|V
 +
|<code>Integer</code>
 +
|عدد بحجم 32 بت عديم الإشارة، ترتيب البايت بحسب VAX (أي VAX byte order، البايت الأقل أهمية مخزَّن أولًا [little-endian]).
 +
|-
 +
|V
 +
|<code>Integer</code>
 +
|عدد بحجم 32 بت عديم الإشارة، ترتيب البايت بحسب VAX (أي VAX byte order، البايت الأقل أهمية مخزَّن أولًا [little-endian]).
 
|-
 
|-
 
| colspan="3" |
 
| colspan="3" |
سطر 187: سطر 185:
 
!شرح
 
!شرح
 
|-
 
|-
!<code>D d</code>
+
|<code>D d</code>
!<code>Float</code>
+
|<code>Float</code>
!توضيب أولي ‎(double-precision)، native format‎
+
|عدد عشري مضاعف، مع اعتماد الترتيب الطبيعي للبايتات (double-precision, native format).
 
|-
 
|-
!<code>F f</code>
+
|<code>F f</code>
!<code>Float</code>
+
|<code>Float</code>
!توضيب أولي ‎(single-precision)، native format‎
+
|عدد عشري، مع اعتماد الترتيب الطبيعي للبايتات (single-precision, native format).
 
|-
 
|-
!<code>E</code>
+
|<code>E</code>
!<code>Float</code>
+
|<code>Float</code>
!double-precision, little-endian byte orde
+
|عدد عشري مضاعف، مع ترتيب البايتات الأكثر أهمية أولًا (double-precision, little-endian byte order).
 
|-
 
|-
!<code>e</code>
+
|<code>e</code>
!<code>Float</code>
+
|<code>Float</code>
!single-precision, little-endian byte order
+
|عدد عشري، مع ترتيب البايتات الأكثر أهمية أولًا (single-precision, little-endian byte order).
 
|-
 
|-
!<code>G</code>
+
|<code>G</code>
!<code>Float</code>
+
|<code>Float</code>
!double-precision, network (big-endian) byte order
+
|عدد عشري مضاعف، مع ترتيب البايتات الأقل أهمية أولًا (double-precision, network [big-endian] byte order).
 
|-
 
|-
!g
+
|<code>g</code>
!<code>Float</code>
+
|<code>Float</code>
!single-precision, network (big-endian) byte order
+
|عدد عشري، مع ترتيب البايتات الأقل أهمية أولًا (single-precision, network [big-endian] byte order).
 
|-
 
|-
!
+
| colspan="3" |
!
 
!
 
 
|-
 
|-
 
!موجهات من النوع String
 
!موجهات من النوع String
سطر 219: سطر 215:
 
!شرح
 
!شرح
 
|-
 
|-
!<code>A</code>
+
|<code>A</code>
!<code>String</code>
+
|<code>String</code>
!سلسلة نصية ثنائية عشوائية ( مُزاحة (padded) بالمسافة البيضاء (space)  و <code>count</code> هو العرض (<code>width)</code> )
+
|سلسلة نصية ثنائية عشوائية ( محشوة بمسافة بيضاء، و <code>count</code> هو العرض [width]).
 
|-
 
|-
!<code>a</code>
+
|<code>a</code>
!<code>String</code>
+
|<code>String</code>
!سلسلة نصية ثنائية عشوائية ( مُزاحة (padded) بالقيمة المعدومة <code>null</code> و <code>count</code> هو العرض (<code>width)</code> )
+
|سلسلة نصية ثنائية عشوائية ( محشوة بالقيمة <code>null</code>، و <code>count</code> هو العرض [width]).
 
|-
 
|-
!<code>Z</code>
+
|<code>Z</code>
!<code>String</code>
+
|<code>String</code>
!مثل "<code>a</code>" باستثناء أنّ <code>null</code>مٌضافة مع <code>*</code>
+
|مثل "a" باستثناء أنّ <code>null</code> مٌضافة مع <code>*</code>.
 
|-
 
|-
!<code>B</code>
+
|<code>B</code>
!<code>String</code>
+
|<code>String</code>
!بتّة نصية ‎(bit string)‎‏ [‏ MSB‏ أولًا]‎‎‎
+
|سلسلة نصية من البتات ‎(bit string)‎ البتات الأكثر أهمية أولًا.
 
|-
 
|-
!<code>b</code>
+
|<code>b</code>
!<code>String</code>
+
|<code>String</code>
!بتّة نصية ‎(bit string)‎‏ [‏ LSB أولًا]‎‎‎
+
|سلسلة نصية من البتات ‎(bit string)‎ البتات الأقل أهمية أولًا.
 
|-
 
|-
!<code>H</code>
+
|<code>H</code>
!<code>String</code>
+
|<code>String</code>
!أثمون نصي ‎(hex string)‎‏ ‎[high nibble first‏]‎‎‎
+
|سلسلة نصية ست عشرية (البايت العلوي [high nibble] أولًا).
 
|-
 
|-
!<code>h</code>
+
|<code>h</code>
!<code>String</code>
+
|<code>String</code>
!أثمون نصي ‎(hex string)‎‏ ‎[low nibble first‏]‎‎‎
+
|سلسلة نصية ست عشرية (البايت السفلي [low nibble] أولًا).
 
|-
 
|-
!<code>u</code>
+
|<code>u</code>
!<code>String</code>
+
|<code>String</code>
!سلسلة نصية مُرمّزة بالترميز UU-encoded
+
|سلسلة نصية مُرمّزة بالترميز UU.
 
|-
 
|-
!<code>M</code>
+
|<code>M</code>
!<code>String</code>
+
|<code>String</code>
!مطبوعة بعلامات التنصيص (quoted printable)، ومرمزة بالترميز MIME (أنظر RFC2045)
+
|ترميز MIME مقتبس قابل للطباعة (quoted-printable, MIME encoding). اطلع على RFC2045.
 
|-
 
|-
!<code>m</code>
+
|<code>m</code>
!<code>String</code>
+
|<code>String</code>
!سلسلة نصية مُرمّز بالترميز base64 (انظر RFC 2045، و <code>count</code> هو العرض (<code>width)</code>)
+
|سلسلة نصية مُرمّز بالترميز base64 (انظر <nowiki>RFC 2045</nowiki>، و <code>count</code> هو العرض [width]).
  
في حال كان <code>count</code> يساوي <code></code>فلن يُضاف أي سطر، أنظر RFC 4648
+
(في حال كان count يساوي 0، فلن يُضاف أي سطر، انظر <nowiki>RFC 4648</nowiki>.)
 
|-
 
|-
!<code>P</code>
+
|<code>P</code>
!<code>String</code>
+
|<code>String</code>
!مؤشر لبنية (pointer to a structure) [سلسلة نصية ذات طول ثابت (fixed-length) ]
+
|مؤشر لبنية (pointer to a structure)، سلسلة نصية ذات طول ثابت (fixed-length).
 
|-
 
|-
!<code>p</code>
+
|<code>p</code>
!<code>String</code>
+
|<code>String</code>
!مؤشر لسلسة نصية مَنهِيّة بالقيمة <code>null</code> (‏null-terminated string)  
+
|مؤشر لسلسة نصية مَنهِيّة بالقيمة null (‏null-terminated string).
 
|-
 
|-
! colspan="3" |
+
| colspan="3" |
 
|-
 
|-
 
!موجهات من النوع Misc
 
!موجهات من النوع Misc
سطر 275: سطر 271:
 
!شرح
 
!شرح
 
|-
 
|-
!<code>@</code>
+
|<code>@</code>
!<code>String</code>
+
|<code>String</code>
!التحرك للموضع المطلق (absolute position)
+
|التحرك للموضع المطلق (absolute position).
 
|-
 
|-
!<code>X</code>
+
|<code>X</code>
!<code>String</code>
+
|<code>String</code>
!العودة بمقدار بتة (byte) واحد
+
|العودة بمقدار بايت (byte) واحد.
 
|-
 
|-
!<code>x</code>
+
|<code>x</code>
!<code>String</code>
+
|<code>String</code>
!بتة معدومة (null byte)
+
|بايت معدوم (null byte).
 
|}
 
|}
 
 
=== <code>buffer: aBufferString</code> ===
 
=== <code>buffer: aBufferString</code> ===
 
مخزن مؤقت يستعمل -إن كانت سعته كافية- لتخزين ناتج تنفيذ التابع <code>pack</code> فيه.
 
مخزن مؤقت يستعمل -إن كانت سعته كافية- لتخزين ناتج تنفيذ التابع <code>pack</code> فيه.
سطر 305: سطر 300:
 
==انظر أيضًا==
 
==انظر أيضًا==
 
* التابع [[Ruby/Array/hash | <code>hash</code>]]: يعيد قيمة <code>Hash</code> للمصفوفة التي استُدعيت معه.
 
* التابع [[Ruby/Array/hash | <code>hash</code>]]: يعيد قيمة <code>Hash</code> للمصفوفة التي استُدعيت معه.
 +
* التابع [[Ruby/String/unpack|unpack]]: يفك ترميز السلسلة النصية التي استدعي معها (والتي قد تحوي بيانات ثنائية) وفقًا إلى سلسلة التنسيق المعطاة، ويعيد مصفوفة من كل قيمة مستخرجة.
 
==مصادر==
 
==مصادر==
 
* [https://ruby-doc.org/core-2.5.1/Array.html#method-i-pack قسم التابع pack في الصنف Array في توثيق روبي الرسمي.]
 
* [https://ruby-doc.org/core-2.5.1/Array.html#method-i-pack قسم التابع pack في الصنف Array في توثيق روبي الرسمي.]

مراجعة 21:51، 27 مارس 2019

يُحزِّمُ (packs) التابع pack محتويات المصفوفة التي استُدعيت معه على شكل تسلسل ثنائي (binary sequence) وفقًا للمُوجِّهات (directives) الواردة في المعامل aTemplateString؛ يمكن أن يتبع المُوجِّهات ","" و "A"" و ""a"" عددًا يحدّد عرض الحقل الناتج. قد تأخذ المُوجّهات المتبقية عددًا أيضًا مما يشير إلى عدد عناصر المصفوفة المطلوب تحويلها.

إذا كان العدد يمثِّل محرف النجمة ("*")، فستُحوَّل جميع عناصر المصفوفة المتبقية. يمكن أن تُتبَع أيٌّ من المُوجّهات "sSiIlL" بشرطة سفلية ("_") أو إشارة تعجب ("!") لاستخدام الحجم الأصلي للمنصة الأساسية (underlying platform) للنوع المحدد؛ خلا ذلك، ستستخدم حجمًا مستقلًا عن المنصة (platform-independent size). يتم تجاهل المسافات البيضاء في سلسلة القالب.

في حال تمرير المعامل aBufferString وكانت سعته (capacity) كافية، فسيستخدمها التابع pack كمخزن مؤقت (buffer) ثمَّ يعيدها. عندما تُحدَّد الإزاحة (offset) ببداية aTemplateString، فستُملَأ النتيجة بعد الإزاحة. في حالة وجود محتويات سابقة في aBufferString وكان طولها أكبر من الإزاحة offset، فسيُكتَب الناتج فوق ما بقي من offsetOfBuffer. أمّا إذا كان طولها أصغر، فسيُملَأ الفراغ المتبقي بالمحرف "‎\0".

البنية العامة

 pack( aTemplateString )  aBinaryString
pack( aTemplateString, buffer: aBufferString )  aBufferString

المعاملات

aTemplateString

يأخذ هذا المعامل إحدى قيم الموجهات المستعملة مع التابع pack وهي:

موجهات من النوع Integer الصنف المعاد شرح
C Integer عدد بحجم 8 بايتات عديمة الإشارة (‎8-bit unsigned).
S Integer عدد بحجم 16 بت عديم الإشارة، مع اعتماد الترتيب الطبيعي (native endian) للبايتات uint16_t)‎).
L Integer عدد بحجم 32 بت عديم الإشارة، مع اعتماد الترتيب الطبيعي (native endian) للبايتات uint32_t)‎).
Q Integer عدد بحجم 64 بت عديم الإشارة، مع اعتماد الترتيب الطبيعي (native endian) للبايتات uint64_t)‎).
J Integer عرض المؤشر عديم الإشارة، مع اعتماد الترتيب الطبيعي (native endian) للبايتات uintptr_t)‎).

متاح منذ Ruby 2.3.

c Integer عدد بحجم 8 بايتات ذات إشارة (‎8-bit signed).
s Integer عدد بحجم 16 بت ذو إشارة، مع اعتماد الترتيب الطبيعي (native endian) للبايتات int16_t)‎).
l Integer عدد بحجم 32 بت ذو إشارة، مع اعتماد الترتيب الطبيعي (native endian) للبايتات int32_t)‎).
q Integer عدد بحجم 16 بت ذو إشارة، مع اعتماد الترتيب الطبيعي (native endian) للبايتات int64_t)‎).
j Integer عرض المؤشر ذي الإشارة، مع اعتماد الترتيب الطبيعي (native endian) للبايتات intptr_t)‎).

متاح منذ Ruby 2.3.

S_ S!‎ Integer عدد صغير عديم الإشارة، مع اعتماد الترتيب الطبيعي للبايتات (unsigned short, native endian).
I I_ I!‎ Integer عدد صحيح عديم الإشارة، مع اعتماد الترتيب الطبيعي للبايتات (unsigned int, native endian).
L_ L!‎ Integer عدد كبير عديم الإشارة، مع اعتماد الترتيب الطبيعي للبايتات (unsigned long, native endian).
Q_ Q!‎ Integer عدد كبير جدًا عديم الإشارة، مع اعتماد الترتيب الطبيعي للبايتات (unsigned long long, native endian).

يطلق الخطأ ArgumentError في حال لم يكن في المنصة النوع long long.

متاح منذ Ruby 2.1.

J!‎ Integer عرض المؤشر عديم الإشارة، مع اعتماد الترتيب الطبيعي للبايتات (مثل الموجه J).

متاح منذ Ruby 2.3.

s_ s!‎ Integer عدد صغير ذو إشارة، مع اعتماد الترتيب الطبيعي للبايتات (signed short, native endian).
i i_ i!‎ Integer عدد صحيح ذو إشارة، مع اعتماد الترتيب الطبيعي للبايتات (signed int, native endian).
l_ l!‎ Integer عدد كبير بإشارة، مع اعتماد الترتيب الطبيعي للبايتات (signed long, native endian).
q_ q!‎ Integer عدد كبير جدًا ذو إشارة، مع اعتماد الترتيب الطبيعي للبايتات (signed long long, native endian).

يطلق الخطأ ArgumentError في حال لم يكن في المنصة النوع long long.

متاح منذ Ruby 2.1

j!‎ Integer عرض المؤشر ذي الإشارة، مع اعتماد الترتيب الطبيعي للبايتات (مثل j).

متاح منذ Ruby 2.3.

S> s> S!> s!>‎L> l> L!> l!>‎I!> i!> ‎

Q> q> Q!> q!>‎

J> j> J!> j!>‎

Integer مثل الموجهات التي لا تحتوي "<"، باستثناء كون البايتات الأقل أهمية مخزنة أولًا (big endian).

إن I!> i!>‎ متاحة منذ Ruby 1.9.3.

"S>‎" مثله مثل "n"

"L>‎" مثله مثل "N"

S< s< S!< s!<‎L< l< L!< l!<‎I!< i!<‎

Q< q< Q!< q!<‎

J< j< J!< j!<‎

Integer مثل الموجهات التي لا تحتوي ">"، باستثناء كون البايتات الأكثر أهمية مخزنة أولًا (little endian).

إن I!< i!<‎ متاحة منذ Ruby 1.9.3.

"S<‎" مثله مثل "v"

"L<‎" مثله مثل "V"

n Integer عدد بحجم 16 بت عديم الإشارة، ترتيب بايت شبكي (network byte order، أي البايت الأكثر أهمية مخزَّن أولًا [big-endian]).
N Integer عدد بحجم 32 بت عديم الإشارة، ترتيب بايت شبكي (network byte order، أي البايت الأكثر أهمية مخزَّن أولًا [big-endian]).
v Integer عدد بحجم 16 بت عديم الإشارة، ترتيب البايت بحسب VAX (أي VAX byte order، البايت الأقل أهمية مخزَّن أولًا [little-endian]).
V Integer عدد بحجم 32 بت عديم الإشارة، ترتيب البايت بحسب VAX (أي VAX byte order، البايت الأقل أهمية مخزَّن أولًا [little-endian]).
V Integer عدد بحجم 32 بت عديم الإشارة، ترتيب البايت بحسب VAX (أي VAX byte order، البايت الأقل أهمية مخزَّن أولًا [little-endian]).
V Integer عدد بحجم 32 بت عديم الإشارة، ترتيب البايت بحسب VAX (أي VAX byte order، البايت الأقل أهمية مخزَّن أولًا [little-endian]).
موجهات من النوع Float عناصر المصفوفة شرح
D d Float عدد عشري مضاعف، مع اعتماد الترتيب الطبيعي للبايتات (double-precision, native format).
F f Float عدد عشري، مع اعتماد الترتيب الطبيعي للبايتات (single-precision, native format).
E Float عدد عشري مضاعف، مع ترتيب البايتات الأكثر أهمية أولًا (double-precision, little-endian byte order).
e Float عدد عشري، مع ترتيب البايتات الأكثر أهمية أولًا (single-precision, little-endian byte order).
G Float عدد عشري مضاعف، مع ترتيب البايتات الأقل أهمية أولًا (double-precision, network [big-endian] byte order).
g Float عدد عشري، مع ترتيب البايتات الأقل أهمية أولًا (single-precision, network [big-endian] byte order).
موجهات من النوع String عناصر المصفوفة شرح
A String سلسلة نصية ثنائية عشوائية ( محشوة بمسافة بيضاء، و count هو العرض [width]).
a String سلسلة نصية ثنائية عشوائية ( محشوة بالقيمة null، و count هو العرض [width]).
Z String مثل "a" باستثناء أنّ null مٌضافة مع *.
B String سلسلة نصية من البتات ‎(bit string)‎ البتات الأكثر أهمية أولًا.
b String سلسلة نصية من البتات ‎(bit string)‎ البتات الأقل أهمية أولًا.
H String سلسلة نصية ست عشرية (البايت العلوي [high nibble] أولًا).
h String سلسلة نصية ست عشرية (البايت السفلي [low nibble] أولًا).
u String سلسلة نصية مُرمّزة بالترميز UU.
M String ترميز MIME مقتبس قابل للطباعة (quoted-printable, MIME encoding). اطلع على RFC2045.
m String سلسلة نصية مُرمّز بالترميز base64 (انظر RFC 2045، و count هو العرض [width]).

(في حال كان count يساوي 0، فلن يُضاف أي سطر، انظر RFC 4648.)

P String مؤشر لبنية (pointer to a structure)، سلسلة نصية ذات طول ثابت (fixed-length).
p String مؤشر لسلسة نصية مَنهِيّة بالقيمة null (‏null-terminated string).
موجهات من النوع Misc عناصر المصفوفة شرح
@ String التحرك للموضع المطلق (absolute position).
X String العودة بمقدار بايت (byte) واحد.
x String بايت معدوم (null byte).

buffer: aBufferString

مخزن مؤقت يستعمل -إن كانت سعته كافية- لتخزين ناتج تنفيذ التابع pack فيه. انتبه إلى أنَّ الخيار "buffer:‎'' لا يضمن عدم تخصيص الذاكرة في التابع pack. إذا كانت سعة aBufferString غير كافية، فسيَحجز التابع pack حجمًا مناسبًا من الذاكرة.

القيم المعادة

يعاد كائنٌ من النوع aBinaryString، أو تخزَّن هذه البيانات المعادة في المعامل aBufferString (إن أعطي) ثم يعاد.

أمثلة

أمثلة على استخدام التابع pack:

 a = [ "a", "b", "c" ]
n = [ 65, 66, 67 ]
a.pack("A3A3A3")   #=> "a  b  c  "
a.pack("a3a3a3")   #=> "a\000\000b\000\000c\000\000"
n.pack("ccc")      #=> "ABC"

انظر أيضًا

  • التابع hash: يعيد قيمة Hash للمصفوفة التي استُدعيت معه.
  • التابع unpack: يفك ترميز السلسلة النصية التي استدعي معها (والتي قد تحوي بيانات ثنائية) وفقًا إلى سلسلة التنسيق المعطاة، ويعيد مصفوفة من كل قيمة مستخرجة.

مصادر