bash - Perl Pack 在 Shell 变量上解压

标签 bash shell perl pack unpack

最终我的目标是将数据的 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/

相关文章:

linux - BASH Shell 交互式 session - 如何修复 ASCII 艺术动画输出?

bash - 是否有更一致的方式来声明 Bash 变量和函数?

Perl WWW::Mechanize 作为子类;无法保持登录到抓取的网站

regex - Perl REGEX 在后处理输出文件时重复捕获组

git bash 自动完成在 Windows 7 x64 上很慢

linux - 无需 cron 即可递归执行脚本

shell - makefile中如何编写嵌套的if?

使用 Sleep() 时 Perl 打印功能无法正常工作

linux - 无法获取cpu温度

linux - 从文件中的一组字符串中替换一个字符串 - SED