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进制字符串(上级半字节在先)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容