我正在尝试将“字符串”转换为填充“\ x00”到“\ xFF”的值,我想知道字符串中的特殊字节是否设置了特殊位。因此我创建了一个小函数,但它不起作用:
sub isBitSetInCtrMsg
{
my $data = shift; # value can be: "\xFF"
my $data_byte_address = shift; # value can be 0-88
my $data_bit_address = shift; # value can be 0-7
my @data_array = split('',$data); #"split string into bytes"
my $data_byte = $data_array[$data_byte_address]; # pick specific byte
$is_set = ($data_byte & (1 << $data_bit_address)); # check if bit is set
return $is_set; # return value
}
我认为它退出了我的代码的一个简单部分,但问题是如果$data = 0xFF
那么一切正常,但如果我的数据是\xFF
我的代码不起作用。
有谁可以告诉我为什么以及如何以正确的方式检查?
答案 0 :(得分:1)
Perl在处理标量时非常神奇。它决定如何处理&#39;它。
如何将值传递到此子例程中?因为我认为你的事情可能会破裂。
考虑:
print 0xFF,"\n";
print "\xFF","\n";
print '\xFF',"\n";
在每种情况下,perl都会弄清楚如何处理你交给它的字符串。如果您通过它,那么每次都有机会&#39; \ xFF&#39;它决定了4个单独的字节,这就是你的问题所在。
尝试添加:
use Data::Dumper;
在您的子组中(在分配之前):
print Dumper \@_;