我对我在这里看到的内容感到困惑:
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"
来自文档:
根据aTemplateString中的指令将arr的内容打包成二进制序列(参见下表)指令“A,'' “A,''和“Z''可以跟一个计数,它给出了结果字段的宽度。
以下是指令:
所以我们似乎使用了A
指令3次?将字符串a
打包成任意二进制字符串(空格填充,count是宽度?)是什么意思?你能帮我理解输出吗?为什么有那么多0?
答案 0 :(得分:1)
在第一种情况下,你打印"a"
但是用空格将其长度填充为3,因此两个空格的总长度为3。
在第二种情况下,您正在执行相同操作,但填充空字节(ASCII值0)。使用转义语法\000
(这是一个字符)打印(并且可以读取)Ruby中的空字节,因此\000\000
实际上只是两个空字节。
答案 1 :(得分:0)
变量n
无关紧要,因此您可以忽略它。
在pack
语句中,字节"a"
,"b"
和"c"
被连接("打包")到一个字符串中,并带有填充它们之间。填充是这样的,内容占用的字节数(宽度)加上填充等于提供的数字。
因此,在第一个pack
语句中,"a"
填充了两个空格来构成这三个字节:"a.."
我将.
置于其中空间的位置,以使其清楚。这与"b"
和"c"
类似地填充,以生成"a..b..c.."
。
在第二个pack
语句中,使用空字符('\000'
)而不是空格。 \xxx
表示法(称为"转义序列")表示具有八进制值xxx
的字节。当没有显示有用的ASCII字符(例如' a'或'')时使用它。空字符没有有用的ASCII字符,因此使用\xxx
表示法。