#!/bin/perl sub bin2bit {my ($bin) = @_; $bin=~s/^[0-9]*\`b//ig; $bin=~s/_//g; $bin=~s/b$//ig; return reverse(split('',$bin)); } sub bit_n {my ($msb,$lsb,@bit) = @_; while($lsb>$#bit) {push(@bit,0);} while($msb>$#bit) {push(@bit,0);} if( $msb eq "" ) {return @bit;} elsif($lsb eq "" ) {return $bit[$msb];} elsif($msb < $lsb) {return @bit[$msb..$lsb];} else {return @bit[$lsb..$msb];} } sub bit2bin {return join('',reverse(@_));} sub bit2int {my @bit = reverse(@_); my $int=0; while(@bit) {$int*=2; $int+=$bit[0]; shift(@bit);} $int; } sub hex2int {my ($hex) = @_; $hex=~s/^0x//ig; $hex=~s/^[0-9]*\`h//ig; $hex=~s/_//g; $hex=~s/h$//ig; my $int=0; my @hs=split('',$hex); while(@hs) { $int *=16; if( $hs[0]=~/a/i) {$int+=10;} elsif($hs[0]=~/b/i) {$int+=11;} elsif($hs[0]=~/c/i) {$int+=12;} elsif($hs[0]=~/d/i) {$int+=13;} elsif($hs[0]=~/e/i) {$int+=14;} elsif($hs[0]=~/f/i) {$int+=15;} else {$int+=$hs[0];} shift(@hs); } $int; } sub int2bit {my ($int, $size)=@_; $int=~s/^[0-9]*\`d//ig; $int=~s/_//g; $int=~s/d$//ig; if($size eq "") {$size=1;} my @bit=(); while($int >0) {push(@bit,$int&1); $int=$int>>1; $size--;} while($size>0) {push(@bit,0); $size--;} @bit; } sub int2hex {my ($int,$size)=@_; $int=~s/^[0-9]*\`d//ig; $int=~s/_//g; $int=~s/d$//ig; if($size eq "") {$size=1;} else {$size=(($size-1)>>2)+1;} my @hexa=qw(0 1 2 3 4 5 6 7 8 9 A B C D E F); my $hex=""; while($int >0) {$hex=$hexa[$int%16].$hex; $int=$int>>4; $size--;} while($size>0) {$hex="0".$hex; $size--;} $hex; } 1;