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

时间:2010-12-24 16:43:44

标签: perl decimal hex

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

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

3 个答案:

答案 0 :(得分:13)

hex()接受一个字符串参数,所以由于Perl的弱键入,它会将参数作为字符串读取,无论你通过它。

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

后者是一个十六进制数0x30,它是十进制的48,传递给hex(),然后再次将其解释为十六进制并转换为十进制数72.将其视为执行{{ 1}}。

你应该坚持hex(hex("0x30"))

hex("0x30")

答案 1 :(得分:3)

扩展marcog的答案:来自perldoc -f hex

  

hex EXPR:将EXPR解释为十六进制字符串并返回相应的值。

所以hex实际上是用于字符串和十六进制值之间的转换。通过键入0x30,您已经创建了一个十六进制值。

perl -E '
  say 0x30;
  say hex("0x30");
  say 0x48;
  say hex(0x30);
  say hex(hex("0x30"));'

给出

48
48
72
72
72

答案 2 :(得分:2)

hex()解析十六进制字符串并返回相应的整数。

因此,当您执行hex(0x30)数字文字(0x30)被解释为(0x30为十六进制格式的48)时,则hex()将该标量值视为字符串(“48”)并将其转换为假设字符串是十六进制格式的数字。 0x48 == 72,这是72来自的地方。