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

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 

скрипка

Теперь вы можете спросить, почему этот дополнительный 6 (на вашем выходе)? Becuase printf возвращает длину печатной строки, которая равна 6 в вашем случае.

Итак, вот как это происходит

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

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;