Ruby的pack和unpack

unpack函数

eg1.

"ABC".unpack('CCC') #[65, 66, 67]
#参数'C'代表“取出一个字元,并视为unsigned integer”

eg2.

bitmap_header.unpack("a2LSSL")
# ['BM', 61254, 0, 0, 54]
# a代表一个character,2代表出现两次
# L代表连续四个character做为unsigned long integer
# S代表连续两个character做为unsigned short integer

pack函数

eg1.

[65, 66, 67].pack('CCC')  #'ABC'
["abc", "def"].pack("a*") # "abc"
["abc", "def"].pack("a*a*") #"abcdef"

详解

  • a Ascii字符(塞入null字符/保留后续的null字符或空格)
  • A Ascii字符(塞入空格/删除后续的null字符和空格)
["abc"].pack("A4")  #"abc "
“ abc ”.unpack(A4) #["abc "]
  • Z Ascii字符 (塞入null字符/删除后续的null字符)
  • b 位串(从下级位到上级位)
  • B 未串(从上级位到下级位)
"\001\002".unpack("b*")  # ["1000000001000000"]
"\001\002".unpack("b3") => ["100"]
  • h 16进制字符串(下级半字节在先)
"\x01\xfe".unpack("h*") => ["10ef"]
"\x01\xfe".unpack("h3") => ["10e"]
["10ef"].pack("h*") => "\001\376"
  • H 16进制字符串(上级半字节在先)

你可能感兴趣的:(Ruby的pack和unpack)