【问题标题】:php - printf and sprintf have different outputsphp - printf 和 sprintf 有不同的输出
【发布时间】:2014-11-25 07:10:34
【问题描述】:

我编写了以下小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

为什么我在输出的第一行有那个 6 位?

【问题讨论】:

  • 您的$str_1 包含"6" - 由printf 返回的长度

标签: php


【解决方案1】:

printf 不返回字符串,它直接输出它(并且只返回它的长度)。试试这个

<?php
    $text = "65 127 245";
    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 

【讨论】:

    【解决方案2】:

    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;
    

    【讨论】:

      猜你喜欢
      • 2022-08-06
      • 1970-01-01
      • 2011-06-05
      • 2015-02-15
      • 1970-01-01
      • 2017-05-21
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多