2017-02-16 90 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

當你說'打印'@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中如何表示他們。

這種情況的正常技巧是使用printfsprintf

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

,它將打印:

123aaaafb 

或者類似的東西:

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