2017-02-16 8 views
1

Ich habe ein Array von hexadezimalen Werten. Ich möchte sie sortieren und sie sortiert ausdrucken. Ich bekomme nur das sortierte Array als numerische Elemente gedruckt.Drucken hexadezimale Array sortiert

Der Code ist so weit dies:

use strict; 
use warnings; 
use diagnostics; 

my @numbers = (0x23, 0xAA, 0xaa, 0x01, 0xfB ); 

my @sorted_numbers = sort { $a <=> $b } @numbers; 

print @sorted_numbers; 

Der Ausgang ist dieses:

135170170251 
+1

Wenn Sie 'print' sagen @array \ n" '(mit Anführungszeichen) Leerzeichen zwischen Elementen eingefügt werden, so können Sie sie auseinander teilen – zdim

Antwort

2

von Hex-Literale verwenden, keine Zeichenketten, Sie haben den Perl-Compiler zu Zahlen gemacht. Verwenden Sie Zeichenfolgen, wenn Sie Zeichenfolgen beibehalten möchten, und verwenden Sie hex, um ihre numerische Darstellung abzurufen.

#!/usr/bin/perl 
use warnings; 
use strict; 

my @numbers = ('0x23', '0xAA', '0xaa', '0x01', '0xfB'); 

my @sorted_numbers = sort { hex $a <=> hex $b } @numbers; 

print "@sorted_numbers\n"; 

Ich habe auch doppelte Anführungszeichen in Druck eingefügt, um die Ergebnisse zu trennen.

+0

Danke! Es funktioniert gut – Albert

0

Das ist, weil sie ein numerischer Wert sind, und Sie haben zu repräsentieren nicht gesagt, wie Perl Sie.

Der normale Trick für diese printf oder sprintf zu verwenden ist:

printf "%x" x @sorted_numbers, @sorted_numbers; 

Welche gedruckt wird:

123aaaafb 

Oder so etwas wie:

printf "%02x\n", $_ for @sorted_numbers;