でこーど

>|

$bitassign{'02'} = [
{start => 2.1, len => 5, name => 'dat1', printfunc => \&printBit_ox_5},
{start => 3.3, len => 5, name => 'dat2', printfunc => \&printBit_ox_5},
{start => 3.2, len => 1, name => 'Test', printfunc => \&printTest},
{start => 3.0, len => 2, name => 'Dumy', printfunc => \&printDumy}
];

sub printBit_ox_5 {
my $binstr = sprintf("%05b", $_[0]);
$binstr =~ s/0/-/g;
$binstr =~ s/1/o/g;
print $binstr;
}

sub printTest {
print $_[0];
}

sub printDumy {
printf("%X",$_[0]);
}

sub decode {
my $hexstr = $_[0];
my $msgid = substr($hexstr, 0, 2);
print "$hexstr" . "[$msgid] ";
foreach my $item (@{$bitassign{$msgid}}){
my $startbyte = int($item->{start});
my $startbit = ($item->{start} * 10) % 10;
my $bitlen = $item->{len};
my $decval = ( hex(substr($hexstr, ($startbyte-1) * 2, 2)) >> $startbit )
& ( 2**$bitlen - 1 );
print ", " . $item->{name} . ":[$startbyte.$startbit,$bitlen=>$decval]";
$item->{printfunc}->($decval);

}
print "\n";
}

&decode("01FFFF");

&decode("010000");

&decode("01AAAA");

&decode("015555");

&decode("013E00");

&decode("013EF8");

&decode("013EF9");
&decode("013EFA");
&decode("013EFB");

&decode("023EFC");

 

|<