2017-02-16 60 views
1

У меня есть массив шестнадцатеричных значений. Я хочу отсортировать их и распечатать их отсортированными. Я получаю отсортированный массив, напечатанный как числовые элементы.Печать шестнадцатеричного массива отсортирована

код до сих пор это:

use strict; 
use warnings; 
use diagnostics; 

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

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

print @sorted_numbers; 

Выход такой:

135170170251 
+1

Когда вы говорите 'print '@array \ n" '(с кавычками) пробелы встают между элементами, поэтому вы можете рассказать им обособленно – zdim

ответ

2

С помощью шестигранных литералов, а не строки, вы сделали компилятор Perl, превратив их в числа. Используйте строки, если вы хотите сохранить строки, и используйте hex, чтобы получить их числовое представление.

#!/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"; 

Я также включил двойные кавычки в печать, чтобы отделить результаты.

+0

Спасибо! Он хорошо работает – Albert

0

Это потому, что они числовое значение, и вы не сказали Perl, как представлять их.

нормальный трюк для этого является использование printf или sprintf:

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

Что напечатает:

123aaaafb 

Или что-то вроде:

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