RubyDocを調べました。しかし、実際のプログラミングで以下の3つがどのように使用されるかを理解するのに十分なコードはありません。
@
、、。X
_x
誰かが簡単なスニペットでそれを説明できますか?
ありがとう
RubyDocを調べました。しかし、実際のプログラミングで以下の3つがどのように使用されるかを理解するのに十分なコードはありません。
@
、、。X
_x
誰かが簡単なスニペットでそれを説明できますか?
ありがとう
私はあなたにいくつかの例を挙げ、あなたと一緒に学びます:
[1,2,3,4].pack("CCCC")
=> "\x01\x02\x03\x04"
したがって、unsignedcharsでシリアル化します。新しいバイトのすべての文字。
[1,2,3,4].pack("CCXCC")
=> "\x01\x03\x04"
[1,2,3,4].pack("CCXXC")
=> "\x03"
'X'をバックスペースディレクティブと考えてください
[1,2,3,4].pack("CCxC")
=> "\x01\x02\x00\x03"
[1,2,3,4].pack("CCxxC")
=> "\x01\x02\x00\x00\x03"
'x'はゼロ値のバイトを配置します。
[1,2,3,4].pack("CC@C")
=> "\x01\x03"
[1,2,3,4].pack("CC@@C")
=> "\x01\x03"
[1,2,3,4].pack("CC@@CC")
=> "\x01\x03\x04"
[1,2,3,4].pack("CC@CC")
=> "\x01\x03\x04"
[1,2,3,4].pack("CC@C@C")
=> "\x01\x04"
[1,2,3,4].pack("CC@C@@C")
=> "\x01\x04"
'@'は単一のバックスペースのようですが、一度に複数の操作をサポートすることはありません。説明としての最後のものは、ドキュメントのテキストとはまったく関係ありません。
@絶対位置に移動します
しかし、それはそれがしているように見えることです。
編集ところで:@
のコンテキストで見ると、はるかに論理的に見えますunpack
:
[1,2,3,4,5].pack("CCCCC").unpack("CCC@CCCCC@CC")
=> [1, 2, 3, 1, 2, 3, 4, 5, 1, 2]
最初からもう一度開梱を開始します。
EDIT2そしてここに、解凍のコンテキストでの他の2つのディレクティブの説明があります。
[1,2,3,4,5].pack("CCCCC").unpack("CCCXC")
=> [1, 2, 3, 3]
[1,2,3,4,5].pack("CCCCC").unpack("CCCXXC")
=> [1, 2, 3, 2]
[1,2,3,4,5].pack("CCCCC").unpack("CCCxC")
=> [1, 2, 3, 5]
したがって、「x」は次のデコードバイトを無視し、「X」は前のバイトを次のバイトにしてもう一度読み取ります。「X」はスタックできます。
結果を要約する最初の試みは次のとおりです。
pack
:
unpack
:
注リーダーは、説明を簡単にするために私が作成した単語であり、決して正式なものではありません。
EDIT3ここに「\x01」表記の説明もあります:
a = [17, 22, 31]
=> [17, 22, 31]
a.pack("CCC")
=> "\x11\x16\x1F"
これは16進表現の略のようです。そして、私がリンクしたすべてのサイトは、明らかに小数表現を使用しています。それ以外の場合は、ご覧のとおり、これらは指定された数値の16進表現です。