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
十六进制到二进制
将 hex
与 sprintf
结合使用进行二进制转换。
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 对大整数的处理效果很好。
- 与 sprintf 结合:用于灵活的输出格式设置。
来源
本教程通过实际示例演示了十六进制到十进制转换,涵盖了 Perl 的 hex
函数。
作者
列出 所有 Perl 教程。