我有这样的代码。
$entry = &function(); //returns a number between 0 to 20
$var = sprintf("%#.4x", $entry);
if($var=~ /$hex/)
{
//block of statements
}
$ hex将在0x0000 ..... 0x0014内。现在,当function
从1返回到20时,$ var匹配$ hex。 (如0x0001 .... 0x0014)
但是当$ entry为0时,$ var变为0000
。但我希望它是0x0000
。目前,我正在检查是否0000
,我正在通过if循环更改它。如果sprintf本身有可能,请告诉我。
答案 0 :(得分:7)
根据setInexactRepeating的文档:
<强>标志强>
#prefix non-zero hexadecimal with&#34; 0x&#34;或&#34; 0X&#34;
请注意,它显示0x
,因此只有非零值会以sprintf "0x%04x", $entry;
为前缀。
一个简单的解决方法是手动添加前缀:
{{1}}
答案 1 :(得分:2)
文档清楚地提到0x
仅在使用#
标志时附加非零数字。这是有道理的,因为零是零,无论是八进制还是十六进制。因此,用0x
作为前缀是没有意义的。
处理此问题的最佳方法是:
if($var=~ /$hex/ or !$var)
答案 2 :(得分:2)
听起来你正在倒退。以下是不是更有意义?
if ($entry == hex($hex))
如果要比较数字,请比较数字,而不是文本表示。