1

我正在尝试使用此示例:

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呢?

4

2 回答 2

3

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

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>为此。

于 2012-12-20T14:03:50.037 回答
0

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

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

于 2012-12-20T14:05:57.343 回答