【问题标题】:Print hexadecimal array sorted打印已排序的十六进制数组
【发布时间】:2017-02-16 10:22:45
【问题描述】:

我有一个十六进制值数组。我想对它们进行排序并打印它们。我只将排序后的数组打印为数字项。

目前的代码是这样的:

use strict;
use warnings;
use diagnostics;

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

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

print @sorted_numbers;

输出是这个:

135170170251

【问题讨论】:

  • 当你说print "@array\n"(带引号)时,元素之间会插入空格,这样你就可以将它们区分开来

标签: arrays perl printing hex


【解决方案1】:

通过使用十六进制文字,而不是字符串,您让 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";

我还在 print 中加入了双引号来分隔结果。

【讨论】:

    【解决方案2】:

    那是因为它们是一个数值,而你还没有告诉 perl 如何表示它们。

    通常的技巧是使用printfsprintf

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

    将打印的内容:

    123aaaafb
    

    或者类似的东西:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      相关资源
      最近更新 更多