my $in="DA39A3EE5E6B4B0D3255BFEF95601890AFD80709"; my $mask="FFFF804020100804020100804020100804000102"; my $comb=""; for($i=0;$i<20;$i++) { $comb .= sprintf("%02X", ( hex(substr($in,$i*2,2)) & hex(substr($mask,$i*2,2))) ); } print "$in\n"; print "$mask\n========================================\n"; print "$comb\n"; my $bits = unpack("B*", pack("H40",$mask)); my $vecbits = unpack("B*", pack("H40",$comb)); my $vecs = ""; for ($i=0;$i<160;$i++) { if (substr($bits,$i,1) eq "1") { $vecs .= substr($vecbits,$i,1); } } my $vextor = hex(unpack("H*", pack("B32",$vecs))); print "$vextor\n";