【问题标题】:How to print out / access the content of a const void pointer?如何打印/访问 const void 指针的内容?
【发布时间】:2012-12-20 14:00:05
【问题描述】:

我正在尝试使用这个例子:

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

我得到了一个有效的大小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的内容呢?

【问题讨论】:

    标签: c++ boost-asio void-pointers


    【解决方案1】:

    您可以将缓冲区指向的字节打印为:

    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&lt;iomanip&gt;

    【讨论】:

    • 完美!十六进制打印正是我想要的,你搞定了。谢谢!
    【解决方案2】:

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

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

    【讨论】:

    • 是的,除非您将其转换为类型。
    猜你喜欢
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 2021-04-14
    相关资源
    最近更新 更多