如何打印 /访问const void指针的内容
How to print out / access the content of a const void pointer?
我正在尝试使用此示例:
std::size_t s2 = boost::asio::buffer_size(buffer);
const void* p2 = boost::asio::buffer_cast<const void*>(buffer);
我得到了一个vaild尺寸s2
和一些看似有效的地址p2
。
现在,我如何创建cout
或printf
循环或短语调试 - 以查看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*表示语言 库不知道所引用的数据类型。如果您不知道它是哪种类型,则无法打印要指向的值。
相关文章:
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 从"const void*"到"PVOID {aka void*}"[-fall
- 将返回类型专用化为 void 或 const 左值引用
- 不能使这种类型的"void(C::* volatile)(int) const "在参考手册C++示
- 错误:对类型 'const ItemInstance' 的引用无法绑定到类型 'void' 的右值
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- template<class T, int N> void h(T const(&)[N]); as friend function
- 'void (*)(const char*)' 'void (*)()' [-允许]
- 从 'void *' 转换为 'const std::string *&' 必须具有所有中间指针 const 合格
- Python ctypes and void const pointers
- Casting a const void*
- SFML 和 Box2D SetUserData 无法将参数从 const char [4] 转换为 void *
- 警告:'virtual void wxWindowBase::SetInitialBaseSize(const wxSize&)'已弃用
- typedef void (*print_type) (const char*);
- :void setData(const Color * & data_ptr)中的 *& 是什么意思;
- 将所有权从 unique_ptr<T,void(*)(T*)> 转移到 unique_ptr<const T,void(*)(const T*>
- 使用 LLVM 从 const void * 转换为模板类型时出现问题
- 将 std::function 作为参数传递,const void *
- 了解 void f(const T¶m) 中的参数类型
- CA::release_objects(X::List<void const*>*)