perl 将字符串解析为任意基数的整数

d7v8vwbk  于 2023-06-23  发布在  Perl
关注(0)|答案(2)|浏览(113)

在Perl之外的其他语言中,如果我想解析一个字符串,表示一个奇怪的、非标准的基数的数字(不一定是正常的二进制(2),八进制(8),十进制(10)或十六进制(16)基数),或者基数必须在运行时以编程方式确定,在所述基数中从字符串转换为整数是相当简单的,只要基数在2到36之间(其中大于10的基数使用a-z和/或A-Z来表示较大的数字),例如,解析基数为34的"JQ",得到672作为结果,我可以这样做:

int("JQ", 34)  # Python
parseInt("JQ", 34);  // JavaScript
strtol("JQ", NULL, 34);     // C or C++, also strtoul, strtoll, strtoull
std::stol("JQ", NULL, 34);  // C++-only, best when first argument already a std::string, similar options as strto*
$((34#JQ))  # Even bash can do it with built-in functionality
    • Perl中是否有一种内置的方法来完成这种字符串到整数解析,它具有任意的基(理想情况下能够在运行时提供),不依赖于第三方模块,也不需要我编写大量的代码来重新发明轮子?* *(我不寻找任何涉及手动循环来转换数字和乘法为最终值的东西;冗长、乏味、容易出错,而且要重新发明轮子)

我想如果答案是“否”,如果没有其他的,我可以通过让bash用反引号或类似的东西为我做工作来欺骗,但是Perl在常见语言中,包括具有类似设计和应用程序的语言(例如,Perl),感觉有点奇怪。Ruby、PHP、bash),缺少此功能。

bvjxkvbb

bvjxkvbb1#

没有理由仅仅为了解析任意基数中的数字而执行shell。标准(非第三方)POSIX module提供了strtol()函数,就像它是一个 Package 器的C版本一样,它允许您指定2到36之间的基数:

#!/usr/bin/env perl
use strict;
use warnings;
use feature qw/say/;
use POSIX;

say scalar POSIX::strtol("JQ", 34);

需要记住的是,它在列表上下文中返回一个双元素列表(转换后的数字和尾随字符的计数不是它的一部分),在标量上下文中只返回转换后的数字。

wlzqhblo

wlzqhblo2#

没有内置的方法。
(And模块建议,第三方或其他,是题外话。)

相关问题