2

Rubyを使用してエスケープ文字をバイナリファイルに出力する必要があります。主な問題は、スラッシュが正しくエスケープするためにバイト全体が必要であり、そのような方法でバイトを作成できないかどうかわからないことです。

基本的に、16進値を作成しています。

'\x' + char

ここで、charは65などの「hex」値です。hexでは、\x65はASCII文字「e」です。

残念ながら、このシーケンスをファイルに入れると、次のようになります。

\\x65

適切にエスケープされた値で16進文字列を作成するにはどうすればよいですか?一重引用符または二重引用符、パック、アンパック、複数のスラッシュなど、さまざまなことを試しました。さまざまな組み合わせを試したので、始めたときよりも問題の理解が進んでいないように感じました。

どのように?

4

3 に答える 3

2

さて、最初のバイトが整数値の文字列を作成したい場合は0x65Array#pack

irb> [0x65].pack('U')
#=> "e"
irb> "e"[0]
#=> 101

101 10 = 65 16なので、これでうまくいきます。

最初のバイトが '\'、2 番目が 'x'、3 番目が '6'、4 番目が '5' のリテラル文字列を作成する場合は、補間を使用します。

irb> "\\x#{65}"
#=> "\\x65"
irb> "\\x65".split('')
#=> ["\\", "x", "6", "5"]
于 2009-04-08T19:21:44.530 に答える
1

16 進値があり、その 16 進値に対応する文字を含む文字列を作成する場合は、次のようにします。

irb(main):002:0> '65'.hex.chr
=> "e"

別のオプションは、使用することArray#packです。これは、数値のリストを単一の文字列に変換する必要がある場合に使用できます。

irb(main):003:0> ['65'.hex].pack("C")
=> "e"
irb(main):004:0> ['66', '6f', '6f'].map {|x| x.hex}.pack("C*")
=> "foo"
于 2009-04-08T02:55:14.480 に答える