2014-11-25 6 views
2

я написал следующую крошечную php программу для проверки printf и sprintf:PHP - Printf и Sprintf имеют разные выходы

<?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 цифра первая строка вывода?

+1

Ваш '$ str_1' содержит' '6" '- длину, возвращаемую' printf' –

ответ

4

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 (в вашем выходе) тогда? Becuase 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; 
Смежные вопросы