ZetCode

Perl hex 函数

最后修改于 2025 年 4 月 4 日

Perl 的 hex 函数将十六进制字符串转换为十进制数字。它将字符串解释为十六进制数并返回其十进制等效值。

hex 在处理来自文件、用户输入或网络协议的十六进制值时非常有用。它可以处理大写和小写的十六进制数字(A-F 或 a-f)。

基本的 hex 用法

使用 hex 的最简单方法是使用十六进制字符串。

basic.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $hex_value = "FF";
my $decimal = hex($hex_value);

print "Hexadecimal $hex_value is decimal $decimal\n";

我们将十六进制字符串“FF”转换为其十进制等效值。该函数返回 255,也就是十六进制的 FF。

$ ./basic.pl
Hexadecimal FF is decimal 255

十六进制前缀处理

hex 会自动忽略常见的前缀“0x”。

prefix.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $hex1 = "0xFF";
my $hex2 = "FF";

print "With prefix: ", hex($hex1), "\n";
print "Without prefix: ", hex($hex2), "\n";

两种形式产生相同的结果。该函数会跳过任何前导空格和存在的“0x”前缀。

$ ./prefix.pl
With prefix: 255
Without prefix: 255

不区分大小写

hex 可以处理大写和小写十六进制数字。

case.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $upper = "ABCD";
my $lower = "abcd";

print "Uppercase: ", hex($upper), "\n";
print "Lowercase: ", hex($lower), "\n";

该函数将“A”和“a”视为相同,都转换为十进制的 43981。这使其可以灵活地处理不同的输入格式。

$ ./case.pl
Uppercase: 43981
Lowercase: 43981

无效字符

hex 会在第一个无效字符处停止转换。

invalid.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $valid = "1A3F";
my $invalid = "1G3F";

print "Valid: ", hex($valid), "\n";
print "Invalid: ", hex($invalid), "\n";

该函数将“1G3F”仅转换为“1”,因为“G”不是十六进制数字。对于无效字符不会发出警告。

$ ./invalid.pl
Valid: 6719
Invalid: 1

十六进制到二进制

hexsprintf 结合使用进行二进制转换。

binary.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $hex = "A5";
my $decimal = hex($hex);
my $binary = sprintf("%08b", $decimal);

print "Hex $hex is binary $binary\n";

我们首先转换为十进制,然后将其格式化为 8 位二进制。%08b 格式确保前导零,以获得一致的 8 位输出。

$ ./binary.pl
Hex A5 is binary 10100101

从文件中读取十六进制

hex 在处理文件中的十六进制数据时很有用。

file.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

open(my $fh, '<', 'hexdata.txt') or die "Can't open file: $!";

while (my $line = <$fh>) {
    chomp $line;
    print "$line = ", hex($line), "\n";
}

close($fh);

此脚本从文件中读取十六进制值,并将每个值转换为十进制。chomp 在转换前删除换行符。

十六进制算术

hex 支持对十六进制字符串进行算术运算。

arithmetic.pl
#!/usr/bin/perl

use strict;
use warnings;
use v5.34.0;

my $hex1 = "A";
my $hex2 = "5";

my $sum = hex($hex1) + hex($hex2);
print "$hex1 + $hex2 = $sum (decimal)\n";

my $hex_sum = sprintf("%X", $sum);
print "Sum in hex: $hex_sum\n";

我们将十六进制字符串转换为十进制,执行加法,然后将结果格式化回十六进制。这演示了完整的十六进制/十进制转换。

$ ./arithmetic.pl
A + 5 = 15 (decimal)
Sum in hex: F

最佳实践

来源

Perl hex 文档

本教程通过实际示例演示了十六进制到十进制转换,涵盖了 Perl 的 hex 函数。

作者

我叫 Jan Bodnar,是一名充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出 所有 Perl 教程