$value &= ((1<<$obj->{bits})-1);
$rawvalue = $value;
+ if ($obj->{format} eq 'signed') {
+ if ($value & (1<<($obj->{bits}-1))) {
+ $value &= ((1<<($obj->{bits}-1))-1);
+ $value -= (1<<($obj->{bits}-1));
+ }
+ }
+
if ($rates && $obj->{rate}) {
$value = makerate($obj,$value,$addr,$b);
$class.=" rate";
- }
-
+ }
+
$value = $value * ($obj->{scale}||1) + ($obj->{scaleoffset}||0);
}
$t =~ s/(?<=\d)(?=(?:\d\d\d)+\b)/ /g;
$ret .= $cl.$t;
}
- when ("signed") { $ret .= sprintf("$cl%d",$value);}
+ when ("signed") { $t = sprintf("%i",$value);
+ $t =~ s/(?<=\d)(?=(?:\d\d\d)+\b)/ /g;
+ $ret .= $cl.$t;} #$ret .= sprintf("$cl%d",$value);
when ("binary") { $t = sprintf("%0".$obj->{bits}."b",$value);
$t =~ s/(?<=\d)(?=(?:\d\d\d\d)+\b)/ /g;
$ret .= $cl.$t;