2

是否有任何内置函数(例如我们对单个字符有 ord)将字符串转换为其等效数值,反之亦然,即从等效数值中取回字符串。

4

5 回答 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 回答