Chinaunix

标题: Perl数据类型转换问题请教 [打印本页]

作者: iamlimeng    时间: 2013-04-09 17:08
标题: Perl数据类型转换问题请教
本帖最后由 iamlimeng 于 2013-04-10 08:48 编辑
  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;
  4. my $hex = sprintf("0x%x",99); #0x63
  5. my $chr = chr($hex ^ 0x61); #wrong
  6. #my $chr = chr(0x63 ^ 0x61); #right
  7. 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