Mam tablicę wartości szesnastkowych. Chcę je posortować i wydrukować je posortowane. Dostaję tylko posortowaną tablicę drukowaną jako przedmioty numeryczne.

Do tej pory jest to:

use strict;
use warnings;
use diagnostics;

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

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

print @sorted_numbers;

Wyjście jest takie:

135170170251
1
Albert 16 luty 2017, 13:22

2 odpowiedzi

Najlepsza odpowiedź

Korzystając z literałów Hex, a nie ciąży, dokonałeś kompilatora Perla, zamieniaj je w liczby. Użyj ciągów, jeśli chcesz zachować rzuty i użyj hex, aby uzyskać ich reprezentację numeryczną.

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

Dołączyłem również podwójne cytaty w druku, aby oddzielić wyniki.

2
choroba 16 luty 2017, 19:37

To dlatego, że są wartością numeryczną, a nie powiedziałeś Perlu, jak je reprezentować.

Normalna sztuczka na to jest użycie printf lub sprintf:

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

Który wydrukuje:

123aaaafb

Lub coś takiego:

printf "%02x\n", $_ for @sorted_numbers;
0
Sobrique 16 luty 2017, 10:28