如何在perl中增加十六进制

如何在perl中增加十六进制,perl,Perl,代码 use warnings; use strict; my $mv = 41; my $tmp =1; while($tmp<26) { print chr (hex($mv++)); print "\n"; $tmp++; } 使用警告; 严格使用; 我的$mv=41; 我的$tmp=1; 而($tmp您可能需要 for my $i (65..122) { print chr($i); } 你也可以喜欢 for my $char ("a".."z", "A".."Z"

代码

use warnings;
use strict;

my $mv = 41;
my $tmp =1;
while($tmp<26)
{
print  chr (hex($mv++));
print "\n";
$tmp++;
}
使用警告;
严格使用;
我的$mv=41;
我的$tmp=1;
而($tmp您可能需要

for my $i (65..122) {
    print chr($i);
}
你也可以喜欢

for my $char ("a".."z", "A".."Z") {
    print $char;
}
你可能想要

for my $i (65..122) {
    print chr($i);
}
你也可以喜欢

for my $char ("a".."z", "A".."Z") {
    print $char;
}
试试像这样的东西

print chr for (65..90);
试试像这样的东西

print chr for (65..90);

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

my @symbols = 'A'..'Z';
my %map = map { $symbols[$_] => $_+1 } 0..$#symbols;
或(灵活性较低):


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

my @symbols = 'A'..'Z';
my %map = map { $symbols[$_] => $_+1 } 0..$#symbols;
或(灵活性较低):


将实际设定的目标(字符到代码的映射)放在一边,这里的问题是,
$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++;
}
my$mv=0x41;
我的$tmp=1;
而($tmp<26)
{
打印chr($mv++);
打印“\n”;
$tmp++;
}

你应该得到最初的预期结果。

把你的实际目标(字符到代码的映射)放在一边,这里的问题是,
$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++;
}
my$mv=0x41;
我的$tmp=1;
而($tmp<26)
{
打印chr($mv++);
打印“\n”;
$tmp++;
}

你应该得到最初的预期结果。

我建议你阅读
hex
的文档。你似乎认为它的作用与实际相反。更重要的是,没有“hex值”这样的东西;十六进制是表示整数的一种方法。它只用于显示或输入,不用于内部使用。0x20和41是完全相同的值;尝试转换为0x20,然后调用
chr
,这是毫无意义的。在perl中生成字符集就像
'A'..'Z'
一样简单。不知道为什么需要循环…@Diego the loop是为字符指定数值,例如A=1,B=2,该部分不包含在代码中增量运算符有特殊的魔力,它根据它认为它是递增的内容使用。我建议您阅读
hex
的文档。您似乎认为它与实际做的相反。更多关于p没有“十六进制值”这样的东西;十六进制是表示整数的一种方法。它只用于显示或输入,不用于内部使用。0x20和41是完全相同的值;尝试转换为0x20,然后调用
chr
,这是毫无意义的。在perl中生成字符集就像
'A'..'Z'
一样简单。不知道为什么需要循环…@Diego the loop是给字符分配数值,例如A=1,B=2,该部分不包括在代码中增量运算符有特殊的魔力,它根据它认为它在递增的内容使用。一个问题是为什么范围(65..122)[链接]在文档中,十六进制值从4141开始,因为它是十六进制值,
chr()
接受数字值。您可以使用
0x41..0x7a
(或十六进制表示法中的其他值)而不是
65..122
@Amith,十六进制是一种表示法,一种显示数字的方式。“41十六进制”是一种显示六十五的方式。在Perl中,您可以使用
65
64+1
0x41
0101
等创建包含六十五的标量。一个问题是,为什么文档中的范围(65..122)[link]十六进制值从4141开始,因为它是十六进制值和
chr()
接受数值。您只需使用
0x41..0x7a
(或十六进制表示法中的其他值)而不是
65..122
@Amith,十六进制是一种表示法,一种显示数字的方式。“41十六进制”是一种显示六十五的方式。在Perl中,可以使用
65
64+1
0x41
0101
等创建包含六十五的标量。