Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: Re: Hex to decimal

by Ras (Acolyte)
on Apr 26, 2001 at 00:46 UTC ( [id://75615]=note: print w/replies, xml ) Need Help??


in reply to Re: Hex to decimal
in thread Hex to decimal

I'm sorry i made an mistake i want to convert hex FFAA into dec -86. How can i do this using perl and please can you show me some syntax?

Replies are listed 'Best First'.
Re: Re: Re: Hex to decimal
by Albannach (Monsignor) on Apr 26, 2001 at 01:07 UTC

    D:\Perl\dl>perl -e "print unpack('s',pack 's', hex('ffaa'))" -86
    This:
    • takes the string 'ffaa' and makes a decimal value with hex
    • packs that value into a signed short
    • unpacks that structure as a signed short
    • and prints it

    --
    I'd like to be able to assign to an luser

      Note that pack/unpack were not useful in converting from hex to decimal (unlike most people seem to think) but were used here to convert from unsiged to signed-short.

      Also, sprintf isn't useful for converting from hex to decimal but is the proper choice for going the other direction.

      Update: Ah, thanks merlyn; I didn't think of that way to use pack/unpack to convert hex to decimal. To convert without having to worry about little-/big-endian issues gets rather complicated when using pack/unpack and signed values:

      my $hex= "FFAA"; my $signed= unpack "s", pack "S", unpack "v", pack "H*", $hex;
      and it gets even more complicated if you want to handle different numbers of hex digits:
      my $hex= "ABC"; my $unsigned= unpack "V", pack "h*", "".reverse "00000000".$hex; my $signed= unpack "l", pack "L", unpack "V", pack "h*", "".reverse( ( $hex=~/^[89a-f]/i ? "F" : "0" ) x 8 . $hex );

              - tye (but my friends call me "Tye")
      You can skip the hex step with:
      perl -e 'print unpack "s", pack "H*", "ffaa"'
      If that's wrong on your system, it's an endian problem. {grin} So you can also try:
      print unpack "s", pack "h*", scalar reverse "ffaa";
      which does print -86 on my machine.

      -- Randal L. Schwartz, Perl hacker

Re: Re: Re: Hex to decimal
by I0 (Priest) on Apr 26, 2001 at 09:39 UTC
    $signed = (hex(ffaa)^0x8000)-0x8000;

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://75615]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others rifling through the Monastery: (1)
As of 2024-04-18 23:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found