在perl中将字符串转换为二进制数据

时间:2014-11-10 13:52:07

标签: perl

我正在尝试将“字符串”转换为填充“\ 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我的代码不起作用。

有谁可以告诉我为什么以及如何以正确的方式检查?

1 个答案:

答案 0 :(得分:1)

Perl在处理标量时非常神奇。它决定如何处理&#39;它。

如何将值传递到此子例程中?因为我认为你的事情可能会破裂。

考虑:

print 0xFF,"\n";
print "\xFF","\n";
print '\xFF',"\n";

在每种情况下,perl都会弄清楚如何处理你交给它的字符串。如果您通过它,那么每次都有机会&#39; \ xFF&#39;它决定了4个单独的字节,这就是你的问题所在。

尝试添加:

use Data::Dumper;

在您的子组中(在分配之前):

print Dumper \@_;