【发布时间】:2020-03-09 20:07:40
【问题描述】:
最终我的目标是将数据的十六进制转储转换为正确的浮点值。我已经设置了我的 shell 脚本来隔离我需要查看的各个十六进制值,并以正确的顺序排列它们,以便进行一点 Endian 浮点转换。
为了简化一切,我将绕过我设法开始工作的代码,我将从:
rawHex=0x41000000
echo $(perl -e 'print unpack "f", pack "L", $ENV{rawHex}')
当我执行此代码时,结果为 0。但是,如果我要执行代码而不尝试提取 shell 变量的值:
echo $(perl -e 'print unpack "f", pack "L", 0x41000000')
结果是 8,这是我所期望的。
如果我能更新我的 Perl 表达式以正确解释 shell 变量的值,我将不胜感激。谢谢。
【问题讨论】:
-
您在 shell 中定义的变量是“本地”变量,而不是“环境”变量,因此
%ENV看不到它。你需要“导出”它,export rawHex=...(或者只是export rawHex,如果它已经设置好了)。现在%ENV将拥有它。 (或者,您可以将它作为命令行参数或开关传递给您的 Perl 命令行程序) -
我试图通过评估:
echo $(perl -e 'print $ENV{rawHex}')来验证变量是否可以通过这种方式访问,结果如预期的那样是 0x41000000。 -
(为了完善这些 cmets:你还需要 hex。现在已经在 ikegami 的回答中完成了)
标签: bash shell perl pack unpack