PHP中,printf和sprintf的输出结果不同。

3

我编写了下面这个小的 php 程序来测试 printfsprintf

<?php
    $str_1 = printf("%x%x%x", 65, 127, 245);
    $str_2 = sprintf("%x%x%x", 65, 127, 245);

    echo $str_1 . "\n";
    echo $str_2 . "\n";

输出结果是这样的:
417ff56
417ff5

为什么输出的第一行有六位数字?

1
你的 $str_1 中包含一个 "6" - 这是 printf 返回的长度。 - vp_arth
2个回答

9

printf不会返回字符串,它直接输出它(并且仅返回其长度)。尝试这样做:

<?php
    printf("%x%x%x", 65, 127, 245);
    $str_2 = sprintf("%x%x%x", 65, 127, 245);
    echo "\n". $str_2 . "\n";
?>

输出

417ff5
417ff5

Fiddle

现在你可能会问为什么输出中有额外的6呢?因为printf返回打印字符串的长度,在你的情况下是6。

所以这就是它的工作原理。

417ff56            // that extra 6 comes from your first echo.
417ff5 

0

printf:直接打印格式化字符串。

sprintf:将给定的格式转换并存储在变量中,您可以使用echo/print来打印变量值。

$text = "65 127 245";
printf("%x%x%x", 65, 127, 245);
$str_2 = sprintf("%x%x%x", 65, 127, 245);
echo $str_2;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接