在Ruby中,pack是如何工作的?
我对我在这里看到的有点困惑:在Ruby中,pack是如何工作的?,ruby,Ruby,我对我在这里看到的有点困惑: 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 = [ "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
指令?将字符串A
打包成任意二进制字符串(空格填充,计数是宽度)意味着什么?你能帮我理解输出吗?为什么有这么多0吗?在第一种情况下,你打印的是“A”
但是用空格填充其长度到3,因此这两个空格将使总长度达到3
在第二种情况下,您也在执行相同的操作,但使用空字节填充(ASCII值0)。Ruby中的空字节是使用转义语法
\000
(这是一个字符)打印的(并且可以读取),因此\000\000
实际上只有两个空字节。变量n
与此无关,因此您可以忽略它
在pack
语句中,字节“a”
、“b”
和“c”
被连接(“打包”)成一个字符串,并在它们之间加上填充。填充是指内容占用的字节数(宽度)加上填充等于提供的数字
因此,在第一个pack
语句中,“a”
用两个空格填充,以形成这三个字节:“a..”
,我在其中放置了一个
来代替空格,使其清晰明了。这与“b”
和“c”
相连接,以产生“a...b...c..
在第二个pack
语句中,使用空字符('\000'
)代替空格。\xxx
表示法(称为“转义序列”)是指具有八进制值的字节xxx
。在没有有用的ASCII字符(如“a”或“)时使用显示。空字符没有有用的ASCII字符,因此使用\xxx
表示法