Igor
Igor

Reputation: 6245

Converting to hexadecimal value in Perl

The following code:

$tmp1 = $_;
print "tmp1 is $tmp1";
$tmp1_hex = hex($tmp1);
print "tmp1_hex is $tmp1_hex\n";
$Lat_tmp1 = ($tmp1_hex >> 8) &0x00ff;

prints:

tmp1 is 0018
tmp1_hex is 24

The text file I'm reading the data from contains the string 0018, but when I convert it to the hex value I shouldn't be receiving 24.

Upvotes: 0

Views: 3042

Answers (3)

brian d foy
brian d foy

Reputation: 132758

The hex function merely interprets the string as a number in hexadecimal form. Beyond that, it's just a number and its original representation doesn't matter.

When you print a number, Perl uses its internal format (%g) to show it. That's a normal, decimal float.

If you want to output the number as something other than Perl's internal format, use printf and the appropriate specifier:

 printf '%x', $number;

You probably want something like:

my $tmp1 = '0018';
print "tmp1 is $tmp1\n";
my $tmp1_hex = hex( $tmp1 );
printf "tmp1_hex is %x\n", $tmp1_hex;

Note that the bitwise operators don't need you to convert the number to any particular base. The number is the same number no matter how you display it.

Upvotes: 1

Stephen Carville
Stephen Carville

Reputation: 21

The function hex() converts from hex to decimal. Try something like this instead

$tmp=$_; $tmp1_hex=sprintf("%X",$tmp);

Upvotes: -1

choroba
choroba

Reputation: 241758

If you want to convert to hex rather than from hex, use sprintf:

my $tmp1_hex = sprintf '%x', $tmp1;

Upvotes: 2

Related Questions