下面的代码:
$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。
0018
24
mu0hgdu01#
如果要将 * 转换为 * hex,而不是将 * 从 * hex转换为 *,请使用sprintf:
my $tmp1_hex = sprintf '%x', $tmp1;
lo8azlld2#
hex函数只将字符串解释为十六进制形式的数字,除此之外,它只是一个数字,其原始表示形式无关紧要。当你打印一个数字时,Perl使用它的内部格式(%g)来显示它,这是一个普通的十进制浮点数。如果要将数字输出为Perl内部格式以外的格式,请使用printf和适当的说明符:
hex
%g
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;
请注意,位运算符不需要您将数字转换为任何特定的基数。无论如何显示,数字都是相同的数字。
q8l4jmvw3#
函数hex()将十六进制转换为十进制。请尝试类似以下的方法$tmp=$_; $tmp1_hex=sprintf("%X",$tmp);
$tmp=$_; $tmp1_hex=sprintf("%X",$tmp);
3条答案
按热度按时间mu0hgdu01#
如果要将 * 转换为 * hex,而不是将 * 从 * hex转换为 *,请使用sprintf:
lo8azlld2#
hex
函数只将字符串解释为十六进制形式的数字,除此之外,它只是一个数字,其原始表示形式无关紧要。当你打印一个数字时,Perl使用它的内部格式(
%g
)来显示它,这是一个普通的十进制浮点数。如果要将数字输出为Perl内部格式以外的格式,请使用
printf
和适当的说明符:您可能需要类似以下的内容:
请注意,位运算符不需要您将数字转换为任何特定的基数。无论如何显示,数字都是相同的数字。
q8l4jmvw3#
函数hex()将十六进制转换为十进制。请尝试类似以下的方法
$tmp=$_; $tmp1_hex=sprintf("%X",$tmp);