0

バイナリ ビットマップのインデックスを表す次の定義済みコードがあります。

0 = standard
1 = special
2 = regular
3 = late
4 = early
5 = on time
6 = generic 
7 = rfu

入力として取る値の例は 213 で、2 進数では 11010101 になります。インデックス 0、2、4、6、および 7 のビットが反転され、このレコードが標準 + 通常 + 初期 + 汎用 + rfu であることを示します。

上記のコード+コード+コードなどで、そのバイナリデータを取得して文字列を作成する方法をperlで理解しようとしています.

どんな助けでも大歓迎です。ありがとう。

編集:これにどのようにアプローチするかについての私の考えは次のとおりです。

  1. 10 進数を 2 進数に変換する
  2. バイナリ文字列の長さを見つける
  3. substr を使用して、インデックスごとに値 (0 または 1) を取得します
  4. インデックス値 = 1 の場合、関連するコードを文字列に追加します

これについてもっと良い方法はありますか?

4

1 に答える 1

3

0 から 7 までの入力でビットをテストし、設定されているビットのみを取得できます。

my $in = 213;
my @r = ("standard","special","regular","late","early","on time","generic","rfu");

print join " + ", @r[ grep { $in & (1 << $_) } 0 .. $#r ];

# or
# print join " + ", map { $in & (1<<$_) ? $r[$_] : () } 0 .. $#r;

出力

standard + regular + early + generic + rfu
于 2013-10-02T21:52:09.993 に答える