将字符串"0x30"和十六进制数0x30传递给hex()函数之间的区别

syl*_*mos 5 perl hex decimal

print hex("0x30"); 给出正确的十六进制到十进制转换.

什么 print hex(0x30);意思?它给出的价值是72.

mar*_*cog 13

hex() 接受一个字符串参数,所以由于Perl的弱类型,无论你传递什么,它都会将参数读作字符串.

前者0x30作为字符串传递,hex()然后直接转换为十进制.

后者是一个十六进制数0x30,它是十进制的48,传递给hex()它再次被解释为十六进制并转换为十进制数72.把它想象成做hex(hex("0x30")).

你应该坚持下去hex("0x30").

$ perl -e 'print 0x30';
48
$ perl -e 'print hex(0x30)';
72
$ perl -e 'print hex(30)';
48
$ perl -e 'print hex("0x30")';
48
$ perl -e 'print hex(hex(30))';
72
Run Code Online (Sandbox Code Playgroud)

  • 十六进制总是将其参数解释为一个字符串,所以传递一个数字似乎是一种给我造成混淆的方法:) (2认同)