print hex("0x30");
给出正确的十六进制到十进制转换。
是什么
print hex(0x30);
是什么意思?
它给出的值是72。
答案 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来自的地方。