美文网首页
Ruby: Array#pack方法

Ruby: Array#pack方法

作者: 瀧浩灬 | 来源:发表于2022-04-11 17:24 被阅读0次

pack(aTemplateString) -> aBinary

根据模板字符串的指令将数组元素打包进一个二进制序列,返回结果是一个二进制的字符串,指令后可以跟一个数字,用于指示结果集的宽度,比如A3,a3,Z3。但是对于不同的指令,其后跟随的数值所表示的含义也不同,可以结合Array#pack方法的文档给出的表格来参考:

integer整数指令(对应数组元素是整数的情况):
Integer Array
Directive Element Meaning
C 8位无符号整数
S 16位无符号
L 32位无符号
Q 64位无符号
c 8位有符号整数(有符号字符)
字符串(对应数组元素是字符串的情况):
String Array
Directive Element Meaning
A 二进制字符串字面值(以空格填充,数值表示宽度,这个宽度就是表示结果集的字符数,如果大于元素的字符长度的,则填充空格,如果小于则截取数组元素的宽度数来处理)
a 和A类似,以null来填充
Z 和a类似,以*填充
H 64位无符号
m base64编码处理(如果数值为0,不会填充行,数值指定在每个LF之间的输入字节数,向下四舍五入最低为3)

应用场景:

字节转二进制序列进而打印字符:

ruby中字符串可以调用bytes方法获取字节数值组成的数组:

"我".bytes # => [230, 136, 145]

因为汉字在utf8中是由3个字节组成的,这里返回了三个字节的ascii对应的数值。
而若想通过这样的字节数值数组反向推到出字符是什么就可以使用pack方法:

puts [230, 136, 145].pack("c*") # => 我

根据前面的表格,c对应的指令含义是8位有符号整数(8位刚好也是一个字节的数值),*则表示处理后面所有的数组元素,并将结果拼接在一起成为一个二进制字符串返回,所以这里的返回结果是:

[230, 136, 145].pack("c*") # => "\xE6\x88\x91"

这就是一个完整的二进制序列了,至于utf8是怎么解析的,可以参考:
https://zh.wikipedia.org/wiki/UTF-8

相关文章

  • Ruby: Array#pack方法

    pack(aTemplateString) -> aBinary 根据模板字符串的指令将数组元素打包进一个二进制序...

  • From Objective-C to Ruby(4)-类和模块

    类 定义类 OC: ruby: 初始化方法 OC: ruby: 实例变量和属性 OC: ruby: 类方法和对象方...

  • From Objective-C to Ruby(3)-方法和块

    方法 定义方法 OC: ruby: 调用方法 OC: ruby: 参数的默认值 OC: 方法的返回值 OC: ru...

  • 器-用:ruby高效能方法 — reduce方法

    一、reduce方法的作用 reduce方法是ruby中的一个重要的方法,也叫inject方法(Ruby1.9之前...

  • ruby 数据类型

    1. Ruby 字符串(String) 2. Ruby 数组 3. Ruby 哈希 哈希的内置方法 4. Ruby...

  • Ruby、RVM-使用总结

    Ruby、RVM-使用总结 安装或更新Ruby 方法一:使用Homebrew安装Ruby Homebrew 是什么...

  • Ruby方法

    Ruby 方法与其他编程语言中的函数类似。Ruby 方法用于捆绑一个或多个重复的语句到一个单元中。方法名应以小写字...

  • Ruby 方法

  • Ruby 方法

    Ruby 方法用于捆绑一个或多个重复的语句到一个单元中。方法名应以小写字母开头。如果您以大写字母作为方法名的开头,...

  • 常用的Ruby方法

    1 当你发送消息到Ruby对象时,Ruby查询与消息同名的方法来调用。Ruby进行方法调用主要有两种方式,obj...

网友评论

      本文标题:Ruby: Array#pack方法

      本文链接:https://www.haomeiwen.com/subject/vraisrtx.html