在perl中映射二进制数据

时间:2013-10-02 21:38:41

标签: perl bitmap binary

我有以下预定义代码表示二进制位图中的索引:

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

我将作为输入的示例值为213,二进制为11010101。索引0,2,4,6和7的位翻转表示此记录为: 标准+常规+早期+通用+ rfu。

我试图在perl中弄清楚如何获取二进制数据并构建一个字符串,如上面提到的代码+代码+代码等。

非常感谢任何帮助。感谢。

编辑:我对如何做到这一点的想法是:

  1. 将十进制转换为二进制
  2. 查找二进制字符串的长度
  3. 使用substr按索引获取值(0或1)索引
  4. 如果索引值= 1,则将相关代码添加到字符串
  5. 有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分: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