sub bin2dec { return unpack("N", pack("B32", substr("0" x 32 . shift, -32))); } #### # Given a lsb-first bitstring, returns # a 2s complement signed integer # sub bin2signed { my $bitstr = $_[0]; my $is_negative = 0; if (substr($bitstr, -1, 1) eq "1") { $bitstr =~ tr/10/01/; $is_negative = 1; } my $result = 0; for (my $i = 0; $i < length($bitstr); ++$i) { $result += substr($bitstr, $i, 1) * (2 ** $i); } if ($is_negative) { $result += 1; $result *= -1; } return $result; }