#! /usr/bin/perl -w if(@ARGV!=1){ die("Wrong usage!\n"); } @opr=("+","-","*","/"); foreach $j(@opr){ $pos=index($ARGV[0],$j); if($pos>-1){goto SKIP;} } $result=convert($ARGV[0]); goto OVER; SKIP: $w=substr($ARGV[0],$pos,1); $first=substr($ARGV[0],0,$pos); $first=~ s/^\s+//; $first=~ s/\s+$//; $second=substr($ARGV[0],$pos+1,length($ARGV[0])-$pos-1); $second=~ s/^\s+//; $second=~ s/\s+$//; #print "$first^$w^$second^"; $k=convert($first); $g=convert($second); if($k==-1 || $g==-1){ $result=-1; goto OVER; } if($w eq "+"){ $result=$k+$g; } if($w eq "-"){ $result=$k-$g; } if($w eq "*"){ $result=$k*$g; } if($w eq "/"){ $result=int($k/$g); } OVER: if($result!=-1){ printf("%d\t0x%x\t0%o\t0y",$result,$result,$result); } else{ die("Error(s) detected in your arguments!\n"); exit(-1); } while($result!=0){ push @temp,$result%2; $result=int($result/2); } @temp=reverse @temp; $bin=join "",@temp; print "$bin\n"; exit(0); #########################Main End######################## sub convert{ my $mode10=0; my $mode16=0; my $mode8=0; my $mode2=0; my $err=0; ($z,$f,$num)=unpack("A1 A1 A*",$_[0]); if($z ne '0'){ if($z ge '1' && $z le '9'){ $mode10=1; } else{ $err=1; } } else{ if($f eq 'x' || $f eq 'X'){ $mode16=1; } elsif($f eq 'y' || $f eq 'Y'){ $mode2=1; } elsif($f ge '0' && $f le '7'){ $mode8=1; } else{ $err=1; } } my $result=0; if($mode10==1){ @arr=reverse(unpack("C*",$_[0])); for($i=0;$i= ord("0") && $arr[$i]<=ord("9")){ $result+=($arr[$i]-48)*(16**$i); } elsif($arr[$i]>=ord("A") && $arr[$i]<=ord("F")){ $result+=($arr[$i]-55)*(16**$i); } elsif($arr[$i]>=ord("a") && $arr[$i]<=ord("f")){ $result+=($arr[$i]-87)*(16**$i); } else{ $err=1; last; } } } if($err==0){ return $result; } else{ return -1; } }