如何打印 /访问const void指针的内容

How to print out / access the content of a const void pointer?

本文关键字:void const 指针 访问 何打印 打印      更新时间:2023-10-16

我正在尝试使用此示例:

std::size_t s2 = boost::asio::buffer_size(buffer);
const void* p2 = boost::asio::buffer_cast<const void*>(buffer);

我得到了一个vaild尺寸s2和一些看似有效的地址p2

现在,我如何创建coutprintf循环或短语调试 - 以查看p2的内容?

我敢打赌这很基本,但是目前我看不到我缺少什么。

尝试了以下方法:

std::cout << "TEST: " << boost::asio::buffer_cast<const void*>(buffer) << std::endl;

,但它仅打印出地址,而不是内容

和此:

for(int i =0; i!=s2; i++){
    std::cout << "TEST: " << p2[i];
}
std::cout << std::endl;

,但我最终遇到了编译错误,例如C0253-未知大小。

那么,如何打印出p2的内容?

您可以打印Buffer指向的字节为:

std::size_t s2 = boost::asio::buffer_size(buffer);
const void* p2 = boost::asio::buffer_cast<const void*>(buffer);
unsigned char const* bytes = static_cast<unsigned char const*>(p2);
for(std::size_t i = 0 ; i < s2 ; ++i)
     std::cout << static_cast<unsigned int>(bytes[i]);

当然,您必须解释输出。

您可以打印十六进制的值,而更容易解释:

std::cout << std::hex << static_cast<unsigned int>(bytes[i]);
          // ^^^^^^^^ note this

我认为您必须为此进行#include<iomanip>

p2的内容是一个内存地址...因为p2是指针。

void*表示语言 库不知道所引用的数据类型。如果您不知道它是哪种类型,则无法打印要指向的值。