我正在尝试解析Linyx sysfs中的CPU节点关联+缓存同级信息.
我可以得到一串比特,例如:
0000111100001111
现在我需要一个函数,其中我有一个十进制数(例如4或5),我需要测试第n位是否设置.因此,它会返回true的4和false为5.我可以通过移动1n次来创建一个字符串,但我不确定语法,是否有更简单的方法?此外,对字符串的长度没有限制,所以我想避免使用十进制< - >二进制转换.
假设你有一个比特字符串"0000111100001111" $str,如果你做预先计算步骤:
my $bit_vector = pack "b*", $str;
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用vec:
$is_set = vec $bit_vector, $offset, 1;
Run Code Online (Sandbox Code Playgroud)
例如,这段代码
for (0..15) {
print "$_\n" if vec $bit_vector, $_, 1;
}
Run Code Online (Sandbox Code Playgroud)
将输出
4
5
6
7
12
13
14
15
Run Code Online (Sandbox Code Playgroud)
请注意,偏移量是从零开始的,因此如果您希望第一个位为第1位,则需要自己添加/减去1.
| 归档时间: |
|
| 查看次数: |
854 次 |
| 最近记录: |