字符串的数字值,反之亦然

时间:2012-04-23 10:19:25

标签: perl

是否有任何内置函数(比如我们有单个字符的ord)将字符串转换为 它的等价数值,反之亦然,即从等效数值中取回字符串。请帮忙,我急需它。

5 个答案:

答案 0 :(得分:3)

除了approach involving splitnickisfat之外,还有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"来对变量进行字符串化。