Как имитировать формат printf% p при использовании std:: cout?
unsigned char *teta = ....;
...
printf("data at %p\n", teta); // prints 0xXXXXXXXX
Как распечатать адрес переменной с помощью iostream
s? Есть ли std::
??? например, std::hex
сделать такой вид преобразования (адрес → строка), поэтому std::cout << std::??? << teta << std::endl
напечатает этот адрес?
(нет спрайтов, пожалуйста;))
Ответы
Ответ 1
Вставить в void*
:
unsigned char* teta = ....;
std::cout << "data at " << static_cast<void*>(teta) << "\n";
iostreams обычно предполагают, что у вас есть строка с любым указателем char*
, но указатель void*
- это именно тот адрес (упрощенный), поэтому iostreams не могут ничего сделать, кроме преобразования этого адреса в строку, а не содержание этого адреса.
Ответ 2
В зависимости от того, что вы хотите использовать больше параметров форматирования printf, вы можете использовать sprintf
С его помощью вы можете форматировать строку так же, как и с printf, а затем распечатать ее с помощью std::cout
Однако это будет связано с использованием временного массива char, поэтому выбор зависит.
Пример:
unsigned char *teta = ....;
...
char formatted[ 256 ]; //Caution with the length, there is risk of a buffer overflow
sprintf( formatted, "data at %p\n", teta );
std::cout << formatted;