Perlでのビット列にグループ分け進文字を変換します
-
21-08-2019 - |
質問
私はビットフラグのシーケンスを表す進文字の一部256文字の文字列を持っている、と私は&
、|
、vec
などでそれらを操作することができるように戻ってビット列に変換しようとしています。進文字列は"76543210"
ような8バイトのグループ、すなわち最下位8ビットは"\x10\x32\x54\x76"
あり、ビット列の00001000
に変換すべきであるように、整数全体のビッグエンディアングループに書き込まれます。
問題がpack
の「h
」形式ではなく8よりも、一度入力の1バイトに動作することであるので、それを使用してからの結果は、直接、正しい順序ではありません。現時点では私はこれをやってます:
my $bits = pack("h*", join("", map { scalar reverse $_ } unpack("(A8)*", $hex)));
これは動作しますが、ハック感じています。そこにきれいな方法であるべきだが、私のpack
-FUは非常に強力ではないように思えます。この変換を行うには良い方法はありますか?
解決
my $hex = "7654321076543210"; # can be as long as needed
my $bits = pack("V*", unpack("N*", pack("H*", $hex)));
print unpack("H*", $bits); #: 1032547610325476
他のヒント
::ベクトルの優れたビットを使用することを検討します。
所属していません StackOverflow