转换为Perl中的十六进制值

j5fpnvbx  于 2022-11-15  发布在  Perl
关注(0)|答案(3)|浏览(298)

下面的代码:

$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

mu0hgdu0

mu0hgdu01#

如果要将 * 转换为 * hex,而不是将 * 从 * hex转换为 *,请使用sprintf

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

lo8azlld2#

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;

请注意,位运算符不需要您将数字转换为任何特定的基数。无论如何显示,数字都是相同的数字。

q8l4jmvw

q8l4jmvw3#

函数hex()将十六进制转换为十进制。请尝试类似以下的方法
$tmp=$_; $tmp1_hex=sprintf("%X",$tmp);

相关问题