Hexer: Liste Hexzahlen

Hi zusammen,

ich hab eine Liste aus hexzahlen in einem array.

  
qw (001 002 00a 00f 01a ...)

Nun möchte ich eine Liste haben, die mir die noch freien Zahlen sortiert ausgibt zwischen 000 und FFF.

Also von der Liste oben wäre das...

  
000  
003  
004  
005  
006  
007  
008  
009  
00B  
00C  
...  
FFF

Hat jemand eine Idee wie man das am einfachsten machen kann?

  1. Noch als Nachtrag...

    Ich hab mir schon Gedanken gemacht und am ehesten würde ich bislang eine
    Schleife von 000 - fff in decimal durchlaufen lassen, das Array mit dem hex-Zahlen in ein hash und dann immer die elemente mit mit hex() gegen den hex-hash prüfen und wenn er nicht existiert in ein eigenes array schreiben.
    Aber ob das so "elegant" ist?! Hmm.

  2. hi,

    Hat jemand eine Idee wie man das am einfachsten machen kann?

    Deine Freunde sind ersteinmal: hex()

    hex EXPR
        hex     Interprets EXPR as a hex string and returns the corresponding
                value. (To convert strings that might start with either 0, 0x,
                or 0b, see the oct entry elsewhere in this document.) If EXPR is
                omitted, uses "$_".

    print hex '0xAf'; # prints '175'
                    print hex 'aF';   # same

    Hex strings may only represent integers. Strings that would
                cause integer overflow trigger a warning.

    Zum Auffinden von Lücken in einer Zahlenreihe, ermittele den kleinsten und den größten Wert, dann durchlaufe die Liste in Integer-Schritten und prüfe, ob der gerade durchlaufene Wert in der Liste vorhanden ist. Ggf. schreibe die Ausgangsliste auf einen hash, da kannst Du mit exists() prüfen.

    Hotti

    1. Ok, dann lass ich das mal so ...

              foreach my $number ( 0 .. 4095)  
              {  
                      my $hex_number = sprintf "%03x", $number;  
                           unless(exists $hash{$hex_number})  
                      {  
                              $next_free = $hex_number;  
                              last;  
                      }  
              }  
      
      
      1. Ok, dann lass ich das mal so ...

        Ok, ich machs mal bischen anders:

          
        my @xli = qw (001 002 00a 00f 01a);      # Ausgangsliste  
        my @in = sort{$a <=> $b}map{hex $_}@xli; # hex umwandeln und sortieren  
        # ab Kleinstwert bis Größtwert durchgehen  
        for(my $i = 0; $i < $in[-1]; $i++){  
        	if($in[$i]){  
        		print "OK, ist drin: $in[$i]\n";  
        	}  
        	else{  
        		print "Nicht in der Ausgangsliste: $i\n";  
        	}  
        }  
        
        

        Hotti