HEX number conversion?

I am trying to convert a scalar variable into a HEX number without success. For example:
\$num = 254.6; #Some number
\$num = sprintf("%.0f",\$num); #Round off the number
... # Now how do I get \$num == "FF" ?

LVL 32
Who is Participating?

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Commented:
\$num=sprintf'%X',\$num;
0
Author Commented:
Ok, well now I feel dumb... If you want the points, ozo, post it as a proposed answer.
0
Author Commented:
Another HEX question:
How do you test raw binary data read from a file without resorting to crytic characters as in the example below?  I would like my code more readable and not have to look up the character codes for the HEX numbers.

#Look for Graphic Control Extension 0x21
if (\$temp =~ /^!/) {
...
read(FILE, \$temp, 1);  #See what kind of extension it is.
if (\$temp =~ /^ù/) {  #Graphic Control label 0xFE
...
}
...
}
0
Commented:
if( \$temp =~ /^\x21/ ){
...
if( substr(\$temp,0,1) eq "\xFE"  ){ #but isn't 'ù' eq "\xF9"  and 'þ' eq "\fe" ?
0
Author Commented:
Thanks again ozo... geez my books are bad!
And you are right 0xFE is 'þ', the error was in my comment, I was testing for 0xF9 (now you can see why I need to use the hex value directly!)

Cheers.
0
Author Commented:
OK - here's another one: (I'm tryin' hard to give away these points)
I plugged in the code you suggested:
\$num=sprintf'%X',\$num; #convert a number to hex
and it works fine except I need a byte returned, when \$num is less than 16.5 I get "F" when I want "0F"

Other than testing for this condition in an 'if' block, can sprintf return formatted hex numbers of a specific length?
Suppose I want "000F" for example.
0
Commented:
perldoc perlfunc
and
perldoc perlre

\$num=sprintf'%04X',\$num;
#another method:
\$num = uc unpack'H2',pack'C',sprintf"%.f",\$num;
\$num = uc unpack'H4',pack'n',sprintf"%.f",\$num;

0

Experts Exchange Solution brought to you by