gpt4 book ai didi

bash - Perl Pack 在 Shell 变量上解压

转载 作者:行者123 更新时间:2023-11-29 09:38:51 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com