Ultimately my goal is to convert a hexdump of data to the correct floating point value. I have set up my shell script to isolate the individual hex values I need to look at and arrange them in the correct order for a little Endian float conversion.
To simplify everything, I'll bypass the code I have managed to get working, and I'll start with:
rawHex=0x41000000
echo $(perl -e 'print unpack "f", pack "L", $ENV{rawHex}')
When I execute this code, the result is 0. However if I were to execute the code without attempting to pull the value of the shell variable:
echo $(perl -e 'print unpack "f", pack "L", 0x41000000')
The result is 8, which is what I am expecting.
I'd appreciate any help on how I can update my Perl expression to properly interpret the value of the shell variable. Thanks.
export rawHex=0x41000000
perl -le'print unpack "f", pack "L", hex($ENV{rawHex})'
As you discovered, your code isn't equivalent to the following:
perl -e 'print unpack "f", pack "L", 0x41000000'
Your code is equivalent to the following:
perl -e 'print unpack "f", pack "L", "0x41000000"'
Like "0x41000000"
, $ENV{rawHex}
produces the string 0x41000000
. On the other hand, 0x41000000
produces the number one billion, ninety million, five hundred nineteen thousand and forty.
To convert the hex representation of a number into the number it represents, one uses hex
. Simply replace $ENV{rawHex}
with hex($ENV{rawHex})
.
export rawHex=0x41000000
perl -le'print unpack "f", pack "L", hex($ENV{rawHex})'
The -l
causes a line feed to be added to the output so you don't need to use echo
. Feel free to remove the l
if you're not actually using echo
Generating code (as suggested in the earlier answer) is a horrible practice.