Chinaunix
标题:
Perl数据类型转换问题请教
[打印本页]
作者:
iamlimeng
时间:
2013-04-09 17:08
标题:
Perl数据类型转换问题请教
本帖最后由 iamlimeng 于 2013-04-10 08:48 编辑
#!/usr/bin/perl
use strict;
use warnings;
my $hex = sprintf("0x%x",99); #0x63
my $chr = chr($hex ^ 0x61); #wrong
#my $chr = chr(0x63 ^ 0x61); #right
print "$chr";
复制代码
我要从十进制转换成十六进制,转换后的数据类型是字符串,而不是十六进制数,虽然多数时候,PERL能根据上下文自动转换数据类型,但在进行位操作时,并没有自动转换,而是报错。
我需要将sprintf转换出来的数据强制变成数字,以便进行位操作,这个问题不知道如何解决?有没有办法将字符串强制转换成数值?或者有没有别的办法解决?
请前辈们指教。
作者:
picbhan
时间:
2013-04-09 17:16
字符串转换为数值 0+‘1232’。另外考虑ord和chr。
作者:
zhlong8
时间:
2013-04-09 17:22
自动转换仅限十进制,这个小骆驼里面应该就有强调吧。 '0x61' 因为那个'x' 被转换成0了
作者:
jason680
时间:
2013-04-09 18:06
本帖最后由 jason680 于 2013-04-09 18:10 编辑
回复
1#
iamlimeng
what do you want to do?
# perl -le 'print sprintf("0x%x",97)'
0x61
# perl -le 'print hex sprintf("0x%x",97)'
97
# perl -le 'print 97 ^ 0x61'
0
# perl -le 'print 98 ^ 0x61'
3
作者:
iamlimeng
时间:
2013-04-09 19:23
我想对两个十六进制数进行位操作,我手工输入两个十六进制数是可以的,但用sprintf转换的就不行,因为转换出来是字符串。不知道该如何转换才能得到十六进制数?
作者:
iamlimeng
时间:
2013-04-10 09:23
回复
3#
zhlong8
谢谢版主提醒,直接用十进制数进行位操作就OK,已经搞定!
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2