在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
),缺少此功能。
2条答案
按热度按时间bvjxkvbb1#
没有理由仅仅为了解析任意基数中的数字而执行shell。标准(非第三方)
POSIX
module提供了strtol()
函数,就像它是一个 Package 器的C版本一样,它允许您指定2到36之间的基数:需要记住的是,它在列表上下文中返回一个双元素列表(转换后的数字和尾随字符的计数不是它的一部分),在标量上下文中只返回转换后的数字。
wlzqhblo2#
没有内置的方法。
(And模块建议,第三方或其他,是题外话。)