打包如何在Ruby中运行?

我对这里看到的内容感到困惑:

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

来自文档:

根据aTemplateString中的指令将arr的内容打包成二进制序列(参见下表)指令“A”,“a”,“和”Z“后面可以跟一个计数,它给出了结果场。

以下是指令:

在此处输入图像描述

所以我们似乎使用了A指令3次? 将字符串a打包成任意二进制字符串是什么意思(空格填充,计数是宽度?)你能帮我理解输出吗? 为什么有那么多0?

在第一种情况下,您打印"a"但是用空格将其长度填充为3,因此两个空格将总长度设置为3。

在第二种情况下,您正在执行相同的操作,但填充空字节而不是(ASCII值0)。 使用转义语法\000 (这是一个字符)打印(并且可以读取)Ruby中的空字节,因此\000\000实际上只是两个空字节。

变量n无关紧要,因此您可以忽略它。

pack语句中,字节"a""b""c"被连接(“打包”)成一个字符串,并在它们之间填充。 填充是这样的,内容占用的字节数(宽度)加上填充等于提供的数量。

所以在第一个pack语句中, "a"用两个空格填充来构成这三个字节: "a.."我放了一个. 代替空间来说清楚。 这与"b""c"类似地填充,以产生"a..b..c.."

在第二个pack语句中,使用空字符( '\000' )而不是空格。 \xxx表示法(称为“转义序列”)表示八进制值为xxx的字节。 当没有显示有用的ASCII字符(如’a’或”)时使用它。 空字符没有有用的ASCII字符,因此使用\xxx表示法。