作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最终我的目标是将数据的 hexdump 转换为正确的浮点值。我已经设置了我的 shell 脚本来隔离我需要查看的各个十六进制值,并以正确的顺序排列它们以进行一点 Endian float 转换。
为了简化一切,我将绕过我设法开始工作的代码,我将从:
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 变量的值的任何帮助,我将不胜感激。谢谢。
最佳答案
export rawHex=0x41000000
perl -le'print unpack "f", pack "L", hex($ENV{rawHex})'
如您所见,您的代码不等同于以下代码:
perl -e 'print unpack "f", pack "L", 0x41000000'
您的代码等同于以下内容:
perl -e 'print unpack "f", pack "L", "0x41000000"'
与 "0x41000000"
一样,$ENV{rawHex}
生成字符串 0x41000000
。另一方面,0x41000000
生成数字十亿、九千万、五十一万九千零四十。
要将数字的十六进制表示形式转换为它所代表的数字,可以使用 hex
。只需将 $ENV{rawHex}
替换为 hex($ENV{rawHex})
。
export rawHex=0x41000000
perl -le'print unpack "f", pack "L", hex($ENV{rawHex})'
-l
会在输出中添加一个换行符,因此您无需使用 echo
。如果您实际上没有使用 echo
l
生成代码(如前面的回答中所建议的那样)是一种可怕的做法。
关于bash - Perl Pack 在 Shell 变量上解压,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58847069/
我是一名优秀的程序员,十分优秀!