2011-07-21 7 views
0

私はruby 1.9.2を使用しています。これは私が見つけたものです。 Hのでニブルの最初のゼロを最初に追加する必要があります

> ['A'].pack('H') 
=> "\xA0" 

入力A追加ニブルが前面に埋め込まなければならない唯一のニブルであるので、高ニブル最初に取り。つまり、上記のコードは、

と同じでなければなりません。
> ['0A'].pack('H') 

しかし、私は何か不足しているようです。誰もが気にして説明する。

最初のケースの答えが\xA0なので、ゼロが右側に埋め込まれていることは明らかです。しかし、最初に高いニブルを扱う場合、A0Aと同じでなければなりません。

答えて

0

半分のバイトをパックすると、1つのニブルが得られます。 unpackの反対を行うことですので、長さ引数を省略しないでください

'X'.unpack('h') 
# => ["8"] 
'X'.unpack('h2') 
# => ["85"] 

'X'.unpack('H') 
# => ["5"] 
'X'.unpack('H2') 
# => ["58"] 

packへ:あなたは、あなたの入力文字列がニブルである期間を指定する必要があります。

+0

ありがとうございました。しかし、なぜ[['A']。pack( 'H2')=> "\ xA0" 'が最後にゼロを追加しているのかという疑問があります。私はこの場合、Aの前に10を加えて10進数値10にし、出力を '\ n 'にするべきだと思います。 –

+0

"ゼロを追加する"のではなく、値が0xA0の1バイトを作成しています。最初の4ビットはハイニブルなので、それがAのところにあります。 pack( 'H2') 'は' ['0A'] pack( 'h2') 'と同じですので、low-highではなくhigh-lowで必要な場合は' 「H」ではなく「h」である。私は、あなたがなぜただ一つのキャラクターが与えられれば、「ニア・ファースト」が低ニブルを占めることを期待しているのか分かりません。ありがとう。 – tadman

+0

私のための混乱をクリアする。 –

関連する問題