是否有任何内置函数(例如我们对单个字符有 ord)将字符串转换为其等效数值,反之亦然,即从等效数值中取回字符串。
问问题
1802 次
5 回答
3
除了涉及split
来自nickisfat的方法外,还有unpack
:
use Encode qw(encode);
my $characters = 'This is my string.';
my $octets = encode 'UTF-8', $characters;
unpack 'C*', $octets
# expression returns qw(84 104 105 115 32 105 115 32 109 121 32 115 116 114 105 110 103 46)
unpack 'H*', $octets
# expression returns '54686973206973206d7920737472696e672e'
于 2012-04-23T10:55:20.010 回答
1
只需将内置函数依次应用于字符串中的每个字符即可。下面可能会变得更漂亮,但会起作用:
#!/usr/bin/perl
use strict ;
use warnings ;
my $string = 'some text' ;
my $num = '115,111,109,101,32,116,101,120,116' ;
strToNum($string) ;
numToStr($num) ;
sub strToNum{
my $input = shift ;
local $" = ',' ;
my @result = map( ord, split(//, $input) ) ;
print "@result\n" ;
}
sub numToStr{
my $input = shift ;
local $" = '' ;
my @result = map( chr, split(/,/, $input) ) ;
print "@result\n" ;
}
于 2012-04-23T10:33:03.253 回答
1
Perl 是动态类型的。因此,根据上下文,变量将被视为字符串或数字。您不需要显式转换。
于 2012-04-23T10:21:30.027 回答
1
通常,您不需要转换数字和字符串值,因为每个标量在您在新上下文中使用时都会自动更新这些值。因此,当您将数字分配给标量并稍后在字符串上下文中使用它时,Perl 会自动为您生成字符串表示形式。
然而,一些库依赖于检查标量来决定如何处理它们——作为数字还是作为字符串(你好,JSON:XS!)除了手动将数字或字符串值重新分配给标量之外,实际上没有任何干净的方法可以解决这个问题擦除“自动生成”部分。在这种情况下,使用一些简单快速的计算,例如$var += 0
对变量进行数字化或$var = "$var"
字符串化。
于 2012-04-23T10:39:31.650 回答
1
ord 也会在 Perl 中做你想做的事:
perl -e '$char = "y"; print ord($char);'
你总是可以使用 perldoc 来检查一个函数是否是 perl 的一部分,perldoc -f ord
于 2012-04-23T10:31:38.580 回答