本文简要介绍ruby语言中 Array.pack
的用法。
用法
pack( aTemplateString ) → aBinaryString
pack( aTemplateString, buffer: aBufferString ) → aBufferString
根据 aTemplateString
中的指令将 arr
的内容打包成二进制序列(见下表) 指令 “A,” “a,” 和 “Z” 后面可以跟一个计数,它给出了结果的宽度场地。剩余的指令也可以进行计数,指示要转换的数组元素的数量。如果计数是星号(“*
”),则将转换所有剩余的数组元素。任何指令“sSiIlL
”可以后跟下划线(“_
”)或感叹号(“!
”),以使用指定类型的底层平台的本机大小;否则,它们使用与平台无关的大小。模板字符串中的空格被忽略。另见 String#unpack
。
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"
如果指定了aBufferString
,并且其容量足够,则pack
将其用作缓冲区并返回。当偏移量由 aTemplateString
的开头指定时,结果填充在偏移量之后。如果 aBufferString
的原始内容存在并且比偏移量长,则 offsetOfBuffer
的其余部分被结果覆盖。如果它更短,则用“\0
”填充空白。
# packed data is appended by default
[255].pack("C", buffer:"foo".b) #=> "foo\xFF"
# "@0" (offset 0) specifies that packed data is filled from beginning.
# Also, original data after packed data is removed. ("oo" is removed.)
[255].pack("@0C", buffer:"foo".b) #=> "\xFF"
# If the offset is bigger than the original length, \x00 is filled.
[255].pack("@5C", buffer:"foo".b) #=> "foo\x00\x00\xFF"
请注意,“buffer:” 选项不保证不会在 pack
中分配内存。如果aBufferString
的容量不够,pack
分配内存。
pack
的指令。
Integer | Array | Directive | Element | Meaning ---------------------------------------------------------------------------- C | Integer | 8-bit unsigned (unsigned char) S | Integer | 16-bit unsigned, native endian (uint16_t) L | Integer | 32-bit unsigned, native endian (uint32_t) Q | Integer | 64-bit unsigned, native endian (uint64_t) J | Integer | pointer width unsigned, native endian (uintptr_t) | | (J is available since Ruby 2.3.) | | c | Integer | 8-bit signed (signed char) s | Integer | 16-bit signed, native endian (int16_t) l | Integer | 32-bit signed, native endian (int32_t) q | Integer | 64-bit signed, native endian (int64_t) j | Integer | pointer width signed, native endian (intptr_t) | | (j is available since 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 | | if the platform has no long long type.) | | (Q_ and Q! is available since Ruby 2.1.) J! | Integer | uintptr_t, native endian (same with J) | | (J! is available since 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 | | if the platform has no long long type.) | | (q_ and q! is available since Ruby 2.1.) j! | Integer | intptr_t, native endian (same with j) | | (j! is available since Ruby 2.3.) | | S> s> S!> s!> | Integer | same as the directives without ">" except L> l> L!> l!> | | big endian I!> i!> | | (available since Ruby 1.9.3) Q> q> Q!> q!> | | "S>" is the same as "n" J> j> J!> j!> | | "L>" is the same as "N" | | S< s< S!< s!< | Integer | same as the directives without "<" except L< l< L!< l!< | | little endian I!< i!< | | (available since Ruby 1.9.3) Q< q< Q!< q!< | | "S<" is the same as "v" J< j< J!< j!< | | "L<" is the same as "V" | | n | Integer | 16-bit unsigned, network (big-endian) byte order N | Integer | 32-bit unsigned, network (big-endian) byte order v | Integer | 16-bit unsigned, VAX (little-endian) byte order V | Integer | 32-bit unsigned, VAX (little-endian) byte order | | U | Integer | UTF-8 character w | Integer | BER-compressed integer Float | Array | Directive | Element | Meaning --------------------------------------------------------------------------- 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 | Array | Directive | Element | Meaning --------------------------------------------------------------------------- A | String | arbitrary binary string (space padded, count is width) a | String | arbitrary binary string (null padded, count is width) Z | String | same as ``a'', except that null is added with * B | String | bit string (MSB first) b | String | bit string (LSB first) H | String | hex string (high nibble first) h | String | hex string (low nibble first) u | String | UU-encoded string M | String | quoted printable, MIME encoding (see also RFC2045) | | (text mode but input must use LF and output LF) m | String | base64 encoded string (see RFC 2045) | | (if count is 0, no line feed are added, see RFC 4648) | | (count specifies input bytes between each LF, | | rounded down to nearest multiple of 3) P | String | pointer to a structure (fixed-length string) p | String | pointer to a null-terminated string Misc. | Array | Directive | Element | Meaning --------------------------------------------------------------------------- @ | --- | moves to absolute position X | --- | back up a byte x | --- | null byte
相关用法
- Ruby Array.pack()用法及代码示例
- Ruby Array.push用法及代码示例
- Ruby Array.permutation()用法及代码示例
- Ruby Array.permutation用法及代码示例
- Ruby Array.product()用法及代码示例
- Ruby Array.prepend用法及代码示例
- Ruby Array.pop用法及代码示例
- Ruby Array.product用法及代码示例
- Ruby Array.hash用法及代码示例
- Ruby Array.to_a用法及代码示例
- Ruby Array.to_h用法及代码示例
- Ruby Array.to_s用法及代码示例
- Ruby Array.array + other_array用法及代码示例
- Ruby Array.take()用法及代码示例
- Ruby Array.reject!用法及代码示例
- Ruby Array.flatten!用法及代码示例
- Ruby Array.reject用法及代码示例
- Ruby Array.repeated_permutation()用法及代码示例
- Ruby Array.index()用法及代码示例
- Ruby Array.rassoc(obj)用法及代码示例
- Ruby Array.values_at()用法及代码示例
- Ruby Array.each用法及代码示例
- Ruby Array.fetch用法及代码示例
- Ruby Array.flatten用法及代码示例
- Ruby Array.sort用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Array.pack。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。