如何在perl中增加hex

时间:2011-09-07 18:20:50

标签: perl

CODE

use warnings;
use strict;

my $mv = 41;
my $tmp =1;
while($tmp<26)
{
print  chr (hex($mv++));
print "\n";
$tmp++;
}

输出 ABCDEFGHIPQRSTUVWXY`abcde

代码生成英文字符集

问题

很少有字符缺少“J-&gt; O&amp;&amp; Z”

原因J十六进制值为4a

如何以perl或其他任何方式递增十六进制值以生成字符集?

4 个答案:

答案 0 :(得分:7)

根据您留下的评论,您的最终目标似乎是生成映射A = 1,B = 2。这是实现这一目标的代码:

my @symbols = 'A'..'Z';
my %map = map { $symbols[$_] => $_+1 } 0..$#symbols;

或(不太灵活):

my %map = map { $_ => ord($_)-ord('A')+1 } 'A'..'Z';

答案 1 :(得分:2)

你可能想要

for my $i (65..122) {
    print chr($i);
}

您也可以

for my $char ("a".."z", "A".."Z") {
    print $char;
}

答案 2 :(得分:1)

将实际规定的目标(字符映射到代码)放在一边,这里的问题是$mv不是十六进制值,它是一个十进制值,您可以将其字符串化并视为十六进制。这意味着49之后的下一个值是50,而不是4a。如果$mv从一开始就是十六进制,那么您就不会遇到此问题(并且您也不需要调用hex())。如果您将$mv声明为:

$mv = 0x41;

然后你会发现值49正确后跟4a。使用您的代码示例:

my $mv = 0x41;
my $tmp = 1;
while ($tmp < 26)
{
    print chr($mv++);
    print "\n";
    $tmp++;
}

您应该获得原始预期结果。

答案 3 :(得分:0)

尝试类似

的内容
print chr for (65..90);