преобразование в шестнадцатеричное значение в Perl - PullRequest
0 голосов
/ 10 марта 2020

Следующий код:

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

печатает:

tmp1 is 0018
tmp1_hex is 24

Текстовый файл, из которого я читаю данные, содержит строку 0018, но когда я преобразовываю ее в шестнадцатеричное значение, которое я не должен получать 24.

Ответы [ 3 ]

2 голосов
/ 10 марта 2020

Если вы хотите преобразовать в hex, а не из hex, используйте sprintf :

my $tmp1_hex = sprintf '%x', $tmp1;
1 голос
/ 10 марта 2020

Функция hex просто интерпретирует строку как число в шестнадцатеричной форме. Кроме того, это просто число, и его оригинальное представление не имеет значения.

Когда вы печатаете число, Perl использует его внутренний формат (%g), чтобы показать его. Это нормальное десятичное число с плавающей запятой.

Если вы хотите вывести число в виде, отличном от внутреннего формата Perl, используйте printf и соответствующий спецификатор:

 printf '%x', $number;

Вы, вероятно, хотите что-то вроде:

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

Обратите внимание, что побитовые операторы не нуждаются в преобразовании числа в какую-либо конкретную базу. Число - это одно и то же число, независимо от того, как оно отображается.

0 голосов
/ 10 марта 2020

Функция hex () конвертирует из шестнадцатеричного в десятичное. Попробуйте что-то вроде этого вместо

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...