是否有任何内置函数(比如我们有单个字符的ord)将字符串转换为 它的等价数值,反之亦然,即从等效数值中取回字符串。请帮忙,我急需它。
答案 0 :(得分:3)
除了approach involving 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'
答案 1 :(得分: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" ;
}
答案 2 :(得分:0)
Perl是动态类型的。因此,根据上下文,变量将被视为字符串或数字。您不需要显式转换。
答案 3 :(得分:0)
ord也会在Perl中做你想做的事:
perl -e '$char = "y"; print ord($char);'
您始终可以使用perldoc来检查函数是否属于perl的一部分,perldoc -f ord
答案 4 :(得分:0)
通常,您不需要转换数字和字符串值,因为每个标量在新上下文中使用时会自动更新这些值。因此,当您为标量指定一个数字并稍后在字符串上下文中使用它时,Perl将自动为您生成字符串表示。
然而,一些库依赖于检查标量来决定如何对待它们 - 作为数字或字符串(Hello,JSON:XS!)除了手动重新分配数字或字符串值之外,没有任何干净的解决方法标量擦除“自动生成”部分。在这种情况下,使用一些简单快速的计算(例如$var += 0
来编号或$var = "$var"
来对变量进行字符串化。