我有一个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
不能被称为数组,因此无法进行数组索引。有没有什么叫标量索引?
答案 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;
}