export rawHex=0x41000000
perl -le'print unpack "f",pack "L",hex($ENV{rawHex})'
您发现,您的代码不等同于以下内容:
perl -e 'print unpack "f",0x41000000'
您的代码等效于以下内容:
perl -e 'print unpack "f","0x41000000"'
像"0x41000000"
,$ENV{rawHex}
产生 string 0x41000000
。另一方面,0x41000000
产生 number 十亿,九千万,五十九万四千四十。
要将数字的十六进制表示转换为数字表示,请使用hex
。只需将$ENV{rawHex}
替换为hex($ENV{rawHex})
。
export rawHex=0x41000000
perl -le'print unpack "f",hex($ENV{rawHex})'
-l
会将换行符添加到输出中,因此您无需使用echo
。如果您实际上并未使用l
,请随时删除
echo
生成代码(如先前答案中所建议)是一种可怕的做法。
,
一个可行的解决方案是
rawHex=0x41000000
echo $(perl -e "print unpack 'f',pack 'L',${rawHex}")
您的代码有两个问题。首先是在bash中,单引号'
之间的变量将不被评估。这就是为什么我在示例中将单引号和双引号都取反了。
第二个问题是使用ENV
。我不确定您为什么使用它,但是您不需要它。
本文链接:https://www.f2er.com/3106219.html