有没有办法在perl中进行标量索引?

时间:2013-12-09 23:00:35

标签: perl indexing bitwise-operators

我有一个32位十六进制值的标量 例如:

$foo_value = 0xabcdf123

我有4个其他标量,$pho0 $pho1 $pho2 $pho3这样

$pho0 = $foo_value [7:0]  ## lower 8 bits of $foo_value [0x23]
$pho1 = $foo_value [15:8] ## bits 15-8 of $foo_value [0xf1]
$pho2 = $foo_value [23:16] ##0xcd
$pho3 = $foo_value[31:24]  ## 0xab

有没有办法在perl中执行此操作?注意,$foo_value不能被称为数组,因此无法进行数组索引。有没有什么叫标量索引?

2 个答案:

答案 0 :(得分:3)

这与使用逐位运算符有什么不同?

$pho0 = $foo_value & 0xFF;
$pho1 = ($foo_value >> 8) & 0xFF;
$pho2 = ($foo_value >> 16) & 0xFF;
$pho3 = ($foo_value >> 24) & 0xFF;

答案 1 :(得分:0)

一个采用十六进制字符串的子程序(是的,就像注释一样)。

这样你就不用费心去命名每个单独的变量(例如$ foo1,$ foo2,$ foo3)

#!/usr/bin/perl

use strict;
use warnings;

my $hval = "0xabcdf123";   #test value
my @bar = splByte($hval);

sub splByte{
    my $foo = shift;
    my @temp = split('',$foo);
    my @bar;

    for my $i(0 .. @temp){
        if ($i < (@temp-1)){
            my $string = "0x" . join('',@temp[$i, ($i+1)]);
            push(@bar, $string) unless $i%2;
        }
    }
    shift @bar;

    return @bar;
}